Thymeleaf 之 使用devtools热启动、热部署

作者: 钟述林 | 来源:发表于2016-10-24 23:16 被阅读844次

本文章来自【知识林】

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中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。

本文章来自【知识林】

相关文章

网友评论

  • 833ff40b5ad5:很实用,这篇文章找了好久了
    钟述林:@渔_民 我也遇到过这种情况,需要先运行入口函数,只要运行过一次再使用mvn spring-boot:run就会起作用的了
    833ff40b5ad5:但是我按照步骤试了为什么还是不行呢。还是需要重启项目才能看得到改动。是不是哪里配置的不对。可是我是按照步骤来的,依赖都添加了的。
    钟述林:@833ff40b5ad5 哈哈,有帮助就好!
  • 225268c79e1c:先碰到一个问题 修改代码之后项目重启 但是vm虚拟机中注入的一些bean没有被清除掉 导致重启失败 异常报告说vm中已经存在了一个相同的bean了 不知道博主 是否遇到过相关问题
    225268c79e1c:@钟述林 已经解决了 程序需要配置一个退出时的监听器。 在热部署的时候将那个些冲突的不能自动销毁bean 通过application上下文取出来强制转化成bean实例 然后调用destroy方法 销毁掉 就可以了 昨天还因为热部署的时候数据库连接池满了 导致热部署失败 看来热部署的时候连接池管理器的也有这个问题
    钟述林:@225268c79e1c 遇到过,就是存在相同的bean了,beanName一样了,你注意找一下你的@Service、@Controller看看在不同的包里有没有名称一样的,或者指定名称冲突的

本文标题:Thymeleaf 之 使用devtools热启动、热部署

本文链接:https://www.haomeiwen.com/subject/vcxruttx.html