在Spring Boot中启用热部署的设置

最近我开始学习Spring Boot,并且在尝试设置热更新功能时进行了一番调查。然而,我发现有些文章的信息有点过时或者设置步骤不全,导致我意外地遇到了一些困难。因此,我在这里总结一下。

环境信息

    • Mac

 

    • IntelliJ IDEA 2019.1.2 (Community Edition)

 

    • Spring Boot Gradle Plugin 2.1.4

 

    Spring Boot Devtools 2.1.4

设置步骤

在“偏好设置”中,勾选“自动构建项目”。

image.png

按下 Shift+Command+A 键打开“命令搜索”窗口,并执行“注册表”选项。

image.png

请勾选”允许在应用运行时编译和自动创建”选项。

image.png

在build.gradle文件中添加以下设置。

bootRun {
    sourceResources sourceSets.main
}

如果使用Thymeleaf作为模板引擎,请在application.properties中添加以下内容。

spring.thymeleaf.cache = false

关于重新加载的动作

举个例子, 当修改src/main/java/hello/GreetingController.java源代码时, 应用程序会重新加载.
在我的环境中, 要使重新加载生效, 需要用Command+S保存源文件。

...
サービスがシャットダウンされた
2019-05-24 16:18:26.310  INFO 37740 --- [      Thread-33] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

アプリが再起動した
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.4.RELEASE)

2019-05-24 16:18:31.397  INFO 37740 --- [  restartedMain] hello.Application                        : Starting Application on xxx.local with PID 37740 (/Users/takehiro/Documents/git/sprint-web-mvc/build/classes/java/main started by takehiro in /Users/user/Documents/git/sprint-web-mvc)
2019-05-24 16:18:31.398  INFO 37740 --- [  restartedMain] hello.Application                        : No active profile set, falling back to default profiles: default
2019-05-24 16:18:31.563  INFO 37740 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
...

另外,当对静态文件src/main/resources/templates/greeting.html进行更改时,只需要通过重新加载浏览器即可实现更改。
对于这种情况,不需要重新加载应用程序。

即時刷新

通过与浏览器的LiveReload扩展结合使用,可以实现自动重新加载,而无需每次手动点击浏览器的重新加载按钮。这是因为Spring Boot Devtools内嵌了LiveReload服务器。

您可以从这里安装扩展程序。

请先打开应用程序,然后在浏览器中显示屏幕。
单击LiveReload扩展程序图标,确保状态显示为“LiveReload is connected, click to disable”。

image.png

这样就实现了热加载。

livereload.gif

请参考

    • Spring boot devtools – Static content reloading does not work in IntelliJ

Spring Boot Gradle Plugin Reference Guide
Spring Boot Reference Guide
How do I install and use the browser extensions?

广告
将在 10 秒后关闭
bannerAds