长大后想做什么?做回小孩!

0%

优雅编程(四)——热部署

在开发SpringBoot的Web应用时,经常需要的重启Web服务器才能使最新修改的代码、配置文件、静态文件生效,这样就不够“优雅”了。想要改变这种情况也并不繁琐,需要我们加入“热部署”的支持,就可以在不重启Web服务器的情况下保证各项文件的修改立即生效。

正文

在IDEA中开发SpringBoot应用时,如果想加入热部署的加持,可以使用spring-boot-devtools来完成:

1
2
3
4
5
6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>

spring-boot-devtools会监听classpath下的文件变动,变动保存生效,其就会立即重启应用。

设置IDEA环境自动编译,首先开启设置中的项目自动编译选项:

QiSQTH.md.png

然后Find Action,找到Registry…打开,找到并勾选compiler.automake.allow.when.app.running:

QiSM0e.md.png

其实,完成上述步骤后,热部署就已经默认开启了。测试一下:

启动应用,去浏览器中请求一下/hello:

QiFJpj.png

然后去加一个Controller方法:

1
2
3
4
5
6
@RestController
public class Controller {
public String hello(String temp){
return "hello";
}
}

稍等片刻,控制台就有重启应用的相关日志:

QiF3tg.md.png

重新发起请求:

QiF8hQ.png


此时的效果是只要我们修改了编辑区的源代码,保存之后,应用程序便会自动重启让修改生效。

可以在application.properties中自定义热部署的配置:

1
2
3
4
5
6
#热部署生效,默认为true开启
spring.devtools.restart.enabled=true
#监听某个静态文件夹下文件的变化(如html文件),当其下面的文件改变的时候能够重新启动SpringBoot
spring.devtools.restart.additional-paths=src/main/resources/templates
#classpath目录下的WEB-INF文件夹内容修改不重启
spring.devtools.restart.exclude=WEB-INF/**