文章目录 概述 shell启动Java类中的main方法 启动脚本分析 启动脚本 shell启动jar包 概述 Java程序 运行在linux主机上, 通过shell脚本启动为进程。...shell启动Java类中的main方法 启动脚本分析 根据服务器上JDK 以及工程部署路径 ?...修改相应的#JDK所在路径 APP_HOME 启动入口类APP_MAINCLASS(需有main方法) 。注意CLASSPATH,务必正确export相应的jar包。...: 应用中的hadoop相关jar尽量和大数据平台的保持一致, 所以本应用的jar都是从大数据平台主机上down下来的 (@ο@)。...#需要启动的Java主程序(main方法类) APP_MAINCLASS=com.tudaxia.test.TestMain #拼凑完整的classpath参数,包括指定lib目录下所有的jar CLASSPATH
打开Settings选项,找到 Annotation Processors > Enable annotation processing。设置完成之后程序正常运...
学过java的都知道main方法是学习java的开始,也是程序的入口,不过你有多少个类或程序,线程,他们的入口方法都是main() main方法是一个静态的方法,所以这个方法是属于类的,而不是对象的;...在 main() 方法中,参数类型是 “String[] args”, 意味着在启动Java应用的同时,传递一个 String 类型的数组来定制化应用的初始化属性。...执行过程: 现在的问题是:JVM是如何加载类,又是如何调用 main() 方法的?...4. executed the main method(执行main方法) 实际上,装载的工作是由Java的 类加载器 完成的。当JVM启动的时候,会同时启动三个类加载器。 1....System class loader(系统加载器):负责加载位于 CLASSPATH 路径中的Java类。 所以,我们的 HelloWorld 类是被系统加载器加载的。
有时候我们需要调用一个类的Main方法,也可说是执行这个类的代码。...但是这时候这个类我们还没有写好,或者这个类是通过网络运行时传给我们的,我们就不可能在程序中知道我们将要运行的类的名字,这时候我们可以利用java的反射机制去调用main方法,只要在我们执行的时候,将我们需要执行的类的名字传递进去就可以了...(String[] args) throws Exception { //这个是我们知道类的名字情况下的调用方式 Test1.main(new String...[]{"abc","efg"}); //程序运行时候传递的第一个参数 我们人为是类的名字 String m = args[0];...,new String[]{"abc","efg"}); //上面的语句不能正确执行,因为Test1中的参数是需要一个String数组,但是在jdk中接收到之后将数组
只要程序启动就会将所有类的代码加载到内存中,放在代码区 load方法会在当前类被加载到内存的时候调用,有且仅会调用一次 如果存在继承关系,会先调用父类的load方法,在调用子类的load方法 +(void...)load{ NSLog(@"类被加载到内存"); } 当前类第一次被使用的时候就会被调用(创建类的对象的时候) initialize方法在整个程序的运行过程中只会被调用一次,无论你使用多次这个类都只会调用一次...initialize 用于对某一个类进行一次性的初始化 如果存在继承关系,会先调用父类的initialize,在调用父类的initialize +(void)initialize{ NSLog
引言 SpringBoot项目中的启动类,一般都是XXApplication,例如StatsApplication,UnionApplication。每个项目的启动类名称都不一样。...但是它的启动类真的是XXApplication吗? ? 2. META-INF/Manifest.mf文件 jar文件实际上是class文件的zip压缩存档。...也就是说: org.springframework.boot.loader.JarLauncher是SpringBoot的启动类!...即,JarLauncher是同进程内,通过反射调用Start-Class对应类,即XXXApplication的main方法。...在JarLauncher内部通过反射调用XXApplication类的main方法。 具体实现位于 MainMethodRunner中。
本文以我们平时最常使用的容器Tomcat为列来介绍以下两个知识点: Spring Boot是怎么整合启动Tomcat容器的; 在Spring Boot中,怎么进行Tomcat的深度配置。...比如说现在我们要研究Spring Boot是在哪个环节点启动Tomcat的, 我的思路是:Tomcat在启动时会调用各个组件的init方法和start方法,那么我只需要在这些方法上打上端点,然后就能在调用栈上看出...,是Tomcat启动的入口点 initialize(); } //...省略部分代码 } img 至此Spring Boot内嵌的Tomcat已将顺序启动了。...中是在哪里注册的呢?...从名字上就能看出这个 类是DispatcherServlet的自动配置类,我们点进去看下是否是在这个类内部注册的DispatcherServlet?
本文以我们平时最常使用的容器Tomcat为列来介绍以下两个知识点: Spring Boot是怎么整合启动Tomcat容器的; 在Spring Boot中,怎么进行Tomcat的深度配置。...比如说现在我们要研究Spring Boot是在哪个环节点启动Tomcat的。...我的思路是:Tomcat在启动时会调用各个组件的init方法和start方法,那么我只需要在这些方法上打上端点,然后就能在调用栈上看出Spring Boot是在哪个环节点启用 Tomcat的了。...中是在哪里注册的呢?...从名字上就能看出这个类是DispatcherServlet的自动配置类,我们点进去看下是否是在这个类内部注册的DispatcherServlet?
打开PyCharm或者别人的代码,经常会看到一行: 所以这行代码是干啥用的?好像不用这行也能运行? 虽然这是个很基础的问题,但因此它常常被忽略,就比如我自己以前也是着急上手py,直到今天才认识它。...__ name__ == '__ main__'是Python的main函数入口,但并不是有这行代码才能运行,这里只是可以判断代码是否被直接执行还是被调用执行。..._main__': print_hi('Python') 运行结果: Hi, 偶尔敲代码 Hi, Python 可见__main__里的代码被执行了。...import main main.print_hi('测试啊啊啊') 运行结果: Hi, 偶尔敲代码 Hi, 测试啊啊啊 可见__main__里的代码没被执行(没打印Hi, Python)。...在"if __name__ == '__main__'"中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码又能够正常运行
本文以我们平时最常使用的容器Tomcat为列来介绍以下两个知识点: Spring Boot是怎么整合启动Tomcat容器的; 在Spring Boot中,怎么进行Tomcat的深度配置。...比如说现在我们要研究Spring Boot是在哪个环节点启动Tomcat的, 我的思路是:Tomcat在启动时会调用各个组件的init方法和start方法,那么我只需要在这些方法上打上端点,然后就能在调用栈上看出...,是Tomcat启动的入口点 initialize(); } //...省略部分代码 } 至此Spring Boot内嵌的Tomcat已将顺序启动了。...中是在哪里注册的呢?...从名字上就能看出这个 类是DispatcherServlet的自动配置类,我们点进去看下是否是在这个类内部注册的DispatcherServlet?
从 Main 方法说起 用过 Spring Boot 的人都知道,首先要写一个 main 方法来启动: @SpringBootApplication public class TomcatdebugApplication...通过这个类图我们可以知道,这个类继承的是ServletWebServerApplicationContext,这就是我们真正的主角,而这个类最终是继承了AbstractApplicationContext...我们从继承关系上可以知道他们都是容器,那么他们到底有啥区别呢?我看看他们的注释是怎么说的。...发布应用启动完成事件 而启动 Tomcat 就是在第7步中“刷新上下文”;Tomcat 的启动主要是初始化2个核心组件,连接器(Connector)和容器(Container),一个 Tomcat 实例就是一个...下期展望 本期文章通过SpringBoot的启动来窥探了Tomcat的内部结构,下一期,我们来分析下本次文章中的连接器(Connetor)和容器(Container)的作用,敬请期待。
要做到这一点,可以在基础类中获取被加载的jar包然后解析出版本号,同时获取main函数以及对应的jar包,这样就掌握了使用情况 获取main函数所在类 抛出异常的时候,异常栈中有所有函数栈,这样就可以找到...main函数所在的类。.../** * 获取main函数所在的类. * [copy from spring] */ private static Class<?...= fileInfo; } /** * 获取main函数所在的类...matcher.find()) { return matcher.group(1); } return null; } } 参考 如何确定Java类是从哪个包加载的
我们通常称之为主函数或者main函数。公共和静态就不用说了,这是java程序的一个入口,而String args [ ]里面是一些命令参数。...前提: 先说定义: 进程是指计算机中的程序在某数据集合上的一次运行活动。 可以这么说,我们写完一段代码(程序)后。...这段代码(程序)从加载、执行到完毕的一个过程,就是进程本身从产生、发展到消亡的过程。 后台进程,可以理解为操作系统自身的一种行为,通常不能控制 前台进程,是与我们实际发生交互的进程。...一点解释: 其中main()是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等方面。...使用Thread建立的线程默认情况下是前台线程,在进程中,只要有一个前台线程未退出,进程就不会终止。 主线程就是一个前台线程。
从 Main 方法说起 用过SpringBoot的人都知道,首先要写一个main方法来启动 @SpringBootApplication public class TomcatdebugApplication...通过这个类图我们可以知道,这个类继承的是ServletWebServerApplicationContext,这就是我们真正的主角,而这个类最终是继承了AbstractApplicationContext...我们从继承关系上可以知道他们都是容器,那么他们到底有啥区别呢?我看看他们的注释是怎么说的。...总结 SpringBoot的启动是通过new SpringApplication()实例来启动的,启动过程主要做如下几件事情:> 1. 配置属性 > 2....发布应用启动完成事件 而启动Tomcat就是在第7步中“刷新上下文”;Tomcat的启动主要是初始化2个核心组件,连接器(Connector)和容器(Container),一个Tomcat实例就是一个Server
包,直接启动,这就得益于SpringBoot内置了容器,可以直接启动,本文将以Tomcat为例,来看看SpringBoot是如何启动Tomcat的,同时也将展开学习下Tomcat的源码,了解Tomcat...从 Main 方法说起 用过SpringBoot的人都知道,首先要写一个main方法来启动 @SpringBootApplication public class TomcatdebugApplication...img 通过这个类图我们可以知道,这个类继承的是ServletWebServerApplicationContext,这就是我们真正的主角,而这个类最终是继承了AbstractApplicationContext...我们从继承关系上可以知道他们都是容器,那么他们到底有啥区别呢?我看看他们的注释是怎么说的。...输出banner 创建上下文 预处理上下文 刷新上下文 再刷新上下文 发布应用已经启动事件 发布应用启动完成事件 而启动Tomcat就是在第7步中“刷新上下文”;Tomcat的启动主要是初始化2个核心组件
SpringBoot是如何启动Tomcat的,同时也将展开学习下Tomcat的源码,了解Tomcat的设计。...从 Main 方法说起 用过SpringBoot的人都知道,首先要写一个main方法来启动 @SpringBootApplicationpublic class TomcatdebugApplication...通过这个类图我们可以知道,这个类继承的是ServletWebServerApplicationContext,这就是我们真正的主角,而这个类最终是继承了AbstractApplicationContext...我们从继承关系上可以知道他们都是容器,那么他们到底有啥区别呢?我看看他们的注释是怎么说的。...发布应用启动完成事件 而启动Tomcat就是在第7步中“刷新上下文”;Tomcat的启动主要是初始化2个核心组件,连接器(Connector)和容器(Container),一个Tomcat实例就是一个Server
本文将从源码角度看下Java的main方法是如何被调用的。...OpenJDK版本 ➜ jdk hg id 76072a077ee1+ jdk-11+28 当我们运行Java命令后,Java程序本身的main方法会首先被执行 C文件src/java.base/share...ret : rslt; } } 该方法最终会调用ContinueInNewThread0方法,开启一个系统线程,且该线程的入口函数是JavaMain。...>CallStaticVoidMethod 方法真正的执行我们提供的Java main方法。...有关(*env)->CallStaticVoidMethod究竟是如何执行的Java main方法,以及Java main方法又是如何调用的其他Java方法,我们之后会另起文章详细分析。
在c89/c99的语言标准中,main函数的声明方式还包括以下形式: int main(int argc,char **argv) int main(int argc,char *argv[]) 以上两种...argc 和 argv 的主要用途为程序运行时,将命令行中的输入参数传递给调用函数。...这两个参数的意义分别如下: int argc:参数个数计数,是一个 int 变量,取值为「用户调用程序输入的参数」+ 1。 为什么要加 1 呢?我们接着往下看。...原因就在于 argv 中存储的第一个字符串是调用程序名。 下面我们动手实践一下,将下面的代码编译后生成对应的可执行程序(.exe)后运行。...然后我们在命令行中调用该程序,执行 main 函数,输出结果如下图所示: ? 从上述程序的输出结果可以清楚的看到 argc 和 argv 代表的具体含义。
学过java的都知道main方法是学习java的开始,也是程序的入口,不过你有多少个类或程序,线程,他们的入口方法都是main()。...main方法是一个静态的方法,所以这个方法是属于类的,而不是对象的;在 main() 方法中,参数类型是 “String[] args”, 意味着在启动Java应用的同时,传递一个 String 类型的数组来定制化应用的初始化属性...执行过程: 现在的问题是:JVM是如何加载类,又是如何调用 main() 方法的?...4. executed the main method(执行main方法) 实际上,装载的工作是由Java的 类加载器 完成的。当JVM启动的时候,会同时启动三个类加载器。 1....System class loader(系统加载器):负责加载位于 CLASSPATH 路径中的Java类。 所以,我们的 HelloWorld 类是被系统加载器加载的。
刚开始接触SpringBoot,看了一些入门的资料,但是比较有意思的是从最简单的hello world到后面代码都不变了啊23333,要改注解的 不是在含main的类里增加其他包含RequestMapping...的controller的类的定义,需要对含main函数的类进行注解,以指向controller类。...方法有两种,一种是用 @ComponentScan(value = {"controller所在包名"}) 另一种是用 @SpringBootApplication 例如含RequestMapping的类...return “Current time: “ + (new Date()).toLocaleString(); } } 要让这个生效,就需要对含main...的类增加注解,ComponentScan方式: package com.test; import org.springframework.boot.SpringApplication
领取专属 10元无门槛券
手把手带您无忧上云