介绍
SpringBoot提供了一个maven插件来支持热部署spring-boot-devtools,仅仅是在开发环境中使用,如果已经打包了就无法使用。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
在不重启容器的情况下重新加载Thymeleaf模板
如果你正在使用Thymeleaf,那就将spring.thymeleaf.cache设置为false。查看ThymeleafAutoConfiguration可以获取其他Thymeleaf自定义选项。
在不重启容器的情况下重新加载FreeMarker模板
如果你正在使用FreeMarker,那就将spring.freemarker.cache设置为false。查看FreeMarkerAutoConfiguration 可以获取其他FreeMarker自定义选项。
在不重启容器的情况下重新加载Java类
现代IDEs(Eclipse, IDEA等)都支持字节码的热交换,所以如果你做了一个没有影响类或方法签名的改变,它会利索地重新加载并没有任何影响。
Spring Loaded在这方面走的更远,它能够重新加载方法签名改变的类定义。如果对它进行一些自定义配置可以强制ApplicationContext刷新自己(但没有通用的机制来确保这对一个运行中的应用总是安全的,所以它可能只是一个开发时间的技巧)。
使用Maven配置Spring Loaded
为了在Maven命令行下使用Spring Loaded,你只需将它作为一个依赖添加到Spring Boot插件声明中即可,比如:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
</dependencies>
</plugin>
基本配置就已经介绍了,使用上非常简便,修改完代码只需要重新编译即可。但是总的来说这种方式并不快,只是比重启快一些而已没有太大的速度提升 编译后会重新加载一遍,如果喜欢热部署推荐使用 JRebel这个有个人免费版本。
高级特性
如果你不想编译,可以指定监控目录一旦目录文件改变,就会触发重新加载
server:
port: 8080
spring:
devtools:
restart:
additional-paths:
src/main/java/com/start