我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

SpringBoot程序员需要的效果就是热更新,而spring boot devtools号称的效果就是:热部署。但是为啥没有期待中的效果呢?为何还需要Ctrl+f9才能重新打包部署呢?这相比较php之类的代码而言。Java的代码的实时生效,实在是很难用。

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - springboot配置热更新
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10openjdk@23.0.2IntelliJ IDEA 2024.3.4.1maven@3.3.2spring boot@2.5.4java@17

实验样本

本文还是拿IDEA初始化的Spring Boot的简单项目做例子。参考文章:

这个项目,通过maven install安装了开发时专用的插件spring boot devtoolspom.xml文件:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
XML

看效果的网址是:

常规方式

常规方式,就是在编辑器的顶部点击绿色的运行按钮。然后修改文件,然后再使用ctrl+f9【重新构建】看效果。

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - 刷新效果
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-2)

看重点,就是说不重新编译,是看不了效果的。所以,点击maven compile或者maven pageage可能也是有效果的。

配置devtools热部署

spring boot devtools安装之后,是需要做配置才能生效的。

  • 修改的文件是:application.properties【推荐】,也可以是application.yml,任选其一。
  • 有好几个位置可以放,优先级不一样。
  • 本文修改的文件是:src/main/resources/application.properties

修改内容如下:

spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java
spring.devtools.restart.exclude=WEB-INF/**
spring.devtools.restart.poll-interval=500ms
spring.devtools.restart.quiet-period=300ms
spring.thymeleaf.cache=false
Ini

前几条内容就是restart,后面的最后一条内容就是:禁用thymeleaf这个默认模版的缓存。对于模版修改之后,是否需要restart的问题。苏南大叔认为:可能需要additional-paths=src/main,包含了javatemplate目录。

这东西的效果就是restart,没有编译和打包。所以只能看到重启的效果,页面变化却是没有生效。

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - devtools配置
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-3)

下面的这篇文章,说的挺明白的。参考:

配置IDE

配置自动编译,有两个位置。如下图所示:

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - 修改设置1
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-4)

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - 自动make
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-5)

配置到这里,就应该可以做到修改文件,到浏览器里面f5就可以看效果了。但是,偶尔会有延迟。

加快编译

对于延迟的问题,这里做一下加速。按着快捷键ctrl+alt+shift+/,进入一个“注册表”的编辑界面。修改两个值,如下图所示:

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - 进入注册表
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-6)

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - 注册表修改项目trigger时机
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-7)

修改到这里,效果就已经非常好了。对于spring boot项目来说,这样的设置已经足够了。

livereload

livereload所做的是解决浏览器端需要再f5一下的问题,并且springboot devtools里面自带livereload服务器。在配置文件里面启用即可。

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - livereload
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-8)

src/main/resources/application.properties

spring.devtools.livereload.enabled=true
Ini

然后在对应的浏览器里面安装对应的插件,即可使用。

chrome浏览器里面的插件id是:jnihajbhpnppcggbcgedagnkighmdlei。下载方式参考:

能用,不过很多年没人维护这个插件了,浏览器提示已停用。

这个浏览器插件livereload没有那么智能的,任何当前停留的页面,都可以被刷新的。无论当前停留页面和这个被监控的项目代码有没有关系。这个对应关系,是由人为的去对应的。

传统的设置(通用)

在非spring boot时代的时候,还需要做下面的项目配置。如下图所示:

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - 修改项目配置
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-9)

苏南大叔:SpringBoot开发,配置IDEA实现代码保存实时刷新 - 修改项目配置2
SpringBoot开发,配置IDEA实现代码保存实时刷新(图10-10)

参考文章:

结语

苏南大叔的Java经验文字,请点击下面的连接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   java