在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署)。有以下四种情况,如何能实现热部署。
1、模板引擎(不支持Java代码修改热部署)
在Spring Boot中开发情况下禁用模板引擎的cache
页面模板改变ctrl+F9可以重新编译当前页面并生效
2、Spring Loaded
2.1 Spring Loaded介绍
Spring官方提供的热部署程序,实现修改类文件的热部署。
2.2 Spring Loaded 使用
下载Spring Loaded(项目地址https://github.com/spring-projects/spring-loaded),放在项目的C:/lib目录中(放在项目目录也可以,在使用时使用相对路径),然后把idea的run参数里的VM参数设置为:
-javaagent:C:/lib/springloaded-1.2.8.RELEASE.jar –noverify再次修改java文件即时生效,我们修改方法的返回值,这样在run 项目的时候,也能进行热部署了。直接访问就可以得到修改后的结果了。
2.2.3 Spring Loaded缺点
引自spring-loaded官方 https://github.com/spring-projects/spring-loaded
Q. Does it reload anything that might change in a class file? A. No, you can’t change the hierarchy of a type. Also there are certain constructor patterns of usage it can’t actually handle right now.
并非所有改变都支持热部署,对框架支持比较弱。
3、JRebel(推荐)
收费的一个热部署软件,安装插件使用即可。
Jrebel 破解建议查看:https://blog.csdn.net/lawsonjin/article/details/76422807
4、Spring Boot Devtools(推荐)
4.1 Spring Boot Devtools原理
深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
4.2 Spring Boot Devtools配置步骤
4.2.1 maven 依赖
maven引入 Spring Boot Devtools 依赖
1 | <dependency> |
4.2.2 maven 插件
在pom.xml文件中,增加如下插件。
1 | <plugins> |
4.2.3 特殊配置
(1) devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties或application.yml 文件中配置spring.thymeleaf.cache=false来实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。
1 | spring: |
(2)配置了后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。
(3)默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。
如果你是eclipse开发,现在已经可以重启项目来使用了。但是,如果你是idea的话,请看4.2.4 的设置!
4.2.4 IDEA 配合Spring Boot Devtools特殊配置
Intellij IEDA和Eclipse不同,Eclipse设置了自动编译之后,修改类它会自动编译,而IDEA在非RUN或DEBUG
4.2.4.1 在设置中打开自动编译
左上角File->Settings->Build,Execution,Deployment->Compiler,选中Build project automaticall
4.2.4.2 打开运行时编译
按快捷键 Shift+Ctrl+Alt+/ ,选择 Registryctrl+shift+alt+/(maintenance)
勾选compiler.automake.allow.when.app.running
4.2.4.3 关闭自动保存
关闭自动保存
File—>settings—->System Settings—>去掉勾选synchronize files on frame or editor tab activation和去掉勾选save files on frame deactivation
1 | synchronize files on frame or editor tab activation,就是当前应用是intellij时,自动保存文件,比如从浏览器切换到intellij,intellij就是active,会自动保存。 |
标志修改文件为星号
File—->Settings—–>Editor—->General—->Editor tabs—->勾选 mark modified files as asterisk
4.3 Spring Boot Devtools 测试问题反馈
实际测试发现有些修改,需要一并修改标有@SpringBootApplication注解的类,才可以保证修改部署成功,特别是修改Controller标注的类。
1 |
|