springboot学习(八)热部署和打包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
在Intellij Idea下,还需要手动进行一些设置。首先到Files→Settings→Compiler,将Build project automatically一项勾选.
连击两次Shift键,输入Registry后找到Registry...回车,直接输入running找到complier.automake.allow.when.app.running
并勾选即可,最后重启一下项目,之后对项目代码的任何更改都将被侦知并自动重新加载,无需手动重启项目
Spring Boot 中热部署最最关键的原理就是两个不同的 classloader:
-
base classloader
-
restart classloader
其中 base classloader 用来加载那些不会变化的类,例如各种第三方依赖,而 restart classloader 则用来加载那些会发生变化的类,例如你自己写的代码。Spring Boot 中热部署的原理就是当代码发生变化时,base classloader 不变,而 restart classloader 则会被废弃,被另一个新的 restart classloader 代替。在整个过程中,因为只重新加载了变化的类,所以启动速度要被重启快。
但是使用 devtools ,默认情况下当静态资源发生变化时,并不会触发项目重启。
打包
Spring Boot自带一个spring-boot-maven-plugin
插件用来打包,我们只需要在pom.xml
中加入以下配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
无需任何配置,Spring Boot的这款插件会自动定位应用程序的入口Class,执行Maven命令即可打包,会生成两个文件:
-
.jar.original
,是Maven标准打包插件打的jar包,它只包含我们自己的Class文件,不包含依赖 -
.jar
,是Spring Boot打包插件创建的,包含依赖的jar和class文件,可以直接运行java -jar xxx.jar