热部署可以使修改代码后,无须重启服务器,就可以加载更改的代码。
第1种:修改服务器配置,使得IDEA窗口失去焦点时,更新类和资源
菜单Run->EditConfiguration,然后配置指定的服务器下,右侧server标签下on frame deactivation=Update classes and resource.
缺点:基于JVM提供的热加载仅支持方法块代码修改,只有debug模式下,并且是在idea失去焦点时才会触发热加载,相对加载速度缓慢。
第2种:使用springloaded jar包
启动应用时添加JVM启动参数:
-javaagent:/home/lkqm/.m2/repository/org/springframework/springloaded/1.2.7.RELEASE/springloaded-1.2.7.RELEASE.jar -noverify
支持成员级别的修改,支持对枚举的修改。
第3种:使用spring-boot-devtools提供的开发者工具
在pom中加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
将依赖标记为optional可以防止将devtools依赖传递到其他模块中。
第4种:使用Jrebel插件
最后3种方法是基于类加载机制实现加载的,因此你修改完代码后必须重新编译当前代码,才能触发热部署,Eclipse默认就支持自动编译,而在IDea中默认是关闭的,设置以下两项设置开启:
(1)“File"->"Settings"->"Build, Execution, Deplyment"->"Compiler"中勾选“build project automatically”
(2)组合键:shift+ctrl+alt+/: regsitry->勾选compiler.automake.allow.when.app.running.
devtools属性默认值
Spring Boot支持的一些库中会使用缓存来提高性能,例如模板引擎将编译后的模板,以避免重复解析模板文件。此外,Spring MVC可以在静态资源响应中添加HTTP缓存头。
虽然缓存在生产中非常有益,但它在开发过程中可能会产生反效果,它会阻止你看到刚刚在应用程序中进行的更改。因此,spring-boot-devtools将默认禁用这些缓存选项。
缓存选项通常在application.properties文件中配置,例如,Thymeleaf提供了spring.thymeleaf.cache属性。spring-boot-devtools模块不需要手动设置这些属性,而是自动应用合理的开发时配置。
devtools自动重启
spring-boot-devtools会在类路径上的文件发生更改时自动重启。默认情况下会监视类路径上的所有变动,但请注意,某些资源(如静态资源和视图模板)不需要重启应用程序。
1.排除资源
某些资源在更尽管时不一定需要触发重启。例如,可以直接编辑Thymeleaf模板。默认情况下,更改/META-INF/maven,/META-INF/resources, /resources, /static, /public或/templates中的资源不会触发重启,但会触发实时重新加载。如果要自定义这些排除项,可以使用spring.devtools.restart.exclude属性。例如,要仅排除/static和/public你将设置以下内容
spring.devtools.restart.exclude = static / **,public / **
如果你想保留上面的默认(情况下的)值并添加其他的排除项,你可以使用
spring.devtools.restart.additional-exclude 属性。
2.监控额外的路径
当你对不在类路径中的文件进行更改时,可能需要重启或重新加载应用程序。为此,请使用spring.dev.tools.restart.additional-paths属性来配置监视其他路径的更改。
3.禁用重启
可以使用spring.devtools.restart.enabled属性来禁用它。
最后欢迎大家访问我的个人网站:1024s