springBoot是如何启动的
springBoot的部署
- 通过maven插件执行install命令,将项目打包成一个jar文件在target目录下
- 执行jar包中的内容, 在服务器上执行java -jar jar包名
- 启动成功
jar包内容
org: 存储springboot启动应用的类
BOOT-INF: 存储编译后的代码 和 第三方jar包
META-INF: 存储启动信息,主要信息如下
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.example.demo.DemoApplication
springBoot启动
java -jar 执行后会启动 org.springframework.boot.loader.JarLauncher 类
这个类会通过 自己编译后的代码 和 第三方jar包所在路径 重写类加载器,通过类加载器反射执行@SpringBootApplication下的main方法 (因jar包和war包启动项目路时存放类的路径不同)
springBoot启动代码导入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-loader</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
代码运行如下
JarLauncher 中的main方法
会根据jar的运行目录重写一个类加载器 ClassLoader
通过反射调用@SpringBootApplication下的main方法
如果想要打断点可以通过JDWP来远程对服务器打断点调试,但是要求本地代码和项目代码相同