本文所属【知识林】:http://www.zslin.com/web/article/detail/26

Springboot+Thymeleaf的开发过程中,默认情况下修改到任何代码都需要重新启动项目才能生效,相信有过开发经验的人都会知道这是一件非常痛苦且非常浪费时间的事情,多么希望能够在修改html、css、js这些文件后刷新页面就能显示修改后的效果。

在网上找了很多热启动、热部署的文档,基本都是一样的,都是叫将spring.thymeleaf.cache设置为false,但根本不够详情,按照所描述的方法很难实现热启动。下面介绍一下使用spring.thymeleaf.cachedevtools来解决html热启动的问题。

  • 准备工作

所有代码都可以直接拷贝上一篇文章《Thymeleaf 之 HelloWorld》

在html页面中如果将<h1>Hello : <b th:text="${name}">姓名</b></h1>修改为<h1>你好 : <b th:text="${name}">姓名</b></h1>,刷新页面是没有任何改变的,只是重新启动项目页面才会由Hello : 知识林变成:你好 : 知识林

  • spring.thymeleaf.cache=false方式
1. 在`application.properties`中加入配置:`spring.thymeleaf.cache=false`;

2. 运行入口函数:启动`RootApplication`里的`main`函数,启动成功后再停止(这步只需要执行一次即可,如果直接执行第三步将无法热启动);

3. 使用`maven`方式启动:`mvn spring-boot:run`。
  • 使用devtools方式

增加maven的devtools依赖

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

增加maven插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

注意:<optional>true</optional>只有设置为true时才会热启动,即当修改了html、css、js等这些静态资源后不用重启项目直接刷新即可。

如果需要在修改java文件后都能自动更新,则需要做一点小改动:

将:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

修改为:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>

配置了<fork>true</fork>后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。

本文所属【知识林】:http://www.zslin.com/web/article/detail/26
文章点评共:4 条
点评内容: 提交点评

12-28 点评:我也试了,也没有生效,博主有解决办法嘛?

08-03 点评:idea下其他设置完了还不行,可以试试这个 ctrl+alt+shift+/ 第一个选项打开后,勾选compiler.automake.allow.when.app.running

06-21 点评:我只想说这个好像没有用

07-11 回复:有用的,你先运行入口函数,再试一下!

10-28 点评:加油

10-28 回复:会持续写更多技术文档的,感谢你的鼓励!