SpringBoot中的热部署
热部署
在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署)。有以下四种情况,如何能实现热部署。
模板引擎
– 在Spring Boot中开发情况下禁用模板引擎的cache
– 页面模板改变ctrl+F9可以重新编译当前页面并生效
Spring Loaded
Spring官方提供的热部署程序,实现修改类文件的热部署
– 下载Spring Loaded(项目地址https://github.com/spring-projects/spring-loaded)
– 添加运行时参数: -javaagent:C:/springloaded-1.2.5.RELEASE.jar -noverify
JRebel
– 收费的一个热部署软件
– 安装插件使用即可
Spring Boot Devtools(推荐)
引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
演示Spring Boot Devtools
1)创建一个Thymeleaf的Springboot的项目:
2) 在templates下,创建一个hello.html文件
3)在controller包下,创建HelloWorldController:
4)启动Springboot应用:
在浏览器中输入:http://localhost:8080/
5) 现在修改映射url:
不要关闭应用!!!
访问:http://localhost:8080/hello
说明,根本没有热部署功能!
现在:打开target包下的:HelloWorldController:
说明:我们的编译后的class文件,根本没有改过。
现在,在我们的src下的HelloWorldController类中:ctrl+F9
然后再次打开target下的HelloWorldController类:
发现,我们改变的HelloWorldController类已经改变了。
再次在浏览器中输入:http://localhost:8080/hello
还是不行,这是我们需要导入spring-boot-devtools依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
此时,我们重启Springboot应用:
在浏览器中输入:http://localhost:8080/hello
在把映射的url修改回来:
不停止应用!!!
然后:ctrl+F9
在浏览器中输入:http://localhost:8080/
热部署成功!
总结:
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
– IDEA 使用 : ctrl+F9
– 或做一些小调整
Intellij IEDA和Eclipse不同,Eclipse设置了自动编译之后,修改类它会自动编译,而IDEA在非RUN或DEBUG情况下
才会自动编译(前提是你已经设置了Auto-Compile)。
• 设置自动编译(settings-compiler-make project automatically)
• ctrl+shift+alt+/(maintenance)
• 勾选compiler.automake.allow.when.app.running