我创建了一个启用了 i18n 的 Spring Boot 2.1.3 应用程序,添加了开发工具,并安装了 Firefox LiveReload 扩展。不幸的是,当我更改 Thymeleaf 模板或 i18n 消息时,它并没有改变。 Spring Boot documentation似乎建议您所需要做的就是安装 devtools,它将禁用静态资源的缓存。
以下是我创建应用程序时所做的操作:
mkdir bootiful-i18n
cd bootiful-i18n
http https://start.spring.io/starter.zip dependencies==web,thymeleaf -d | tar xvz
然后我创建了一个HomeController.java
:
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
String home() {
return "home";
}
}
我在 src/main/resources/templates/home.html
创建了一个 Thymeleaf 模板:
<html xmlns:th="http://www.thymeleaf.org">
<body>
<h1 th:text="#{title}"></h1>
<p th:text="#{message}"></p>
</body>
</html>
我在src/main/resources
中添加了一个messages.properties
文件:
title=Welcome
message=Hello! I hope you're having a great day.
这一切都很好。为了启用热重载,我向 pom.xml
添加了 devtools:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
并安装了 LiveReload extension for Firefox .
我重新启动了服务器,启用了 LiveReload 并导航到 http://localhost:8080 。我尝试更改并保存 home.html
和 messages.properties
并刷新我的浏览器。浏览器中的输出不会改变。我还需要做些什么来禁用 Spring Boot 2.1 中 Thymeleaf 模板和消息包的缓存吗?
最佳答案
Devtools 将禁用缓存,以便在需要再次渲染时可以重新考虑对模板文件的更新。
当您的应用程序在 JVM 进程中启动时,没有任何内容指向您的源文件,它只能看到类路径。因此,您对源文件所做的任何更改都需要更新到类路径位置,这通常是通过要求 IDE“构建项目”来实现的。
因此,模板缺少的步骤是,如果文档对此不清楚,请随时提出问题并提出建议,因为我们已经对此进行了多次迭代。
不过 i18n 没有什么具体的内容。如果您更改它们并更新类路径,我们将重新启动应用程序,而不是像处理模板那样选择它。我们确实尝试过支持一次,请参阅 this issue for more details 。话虽如此,您不应该期望对资源文件的更改“会起作用”。例如,对配置的更改显然需要重新启动应用程序(同样,通过在使用开发工具时更新类路径)。
关于 IDE 支持的一些添加注释:
- Eclipse 在“保存”时增量编译并复制更改的文件。因此,如果您保存了模板,就可以开始了
- IntelliJ IDEA Ultimate 有 dedicated devtools support自 2018.1 起 - 如果您将“帧停用”配置为“更新资源”,当您切换到浏览器时,它将执行正确的操作。在此支持之前,我有一个特殊的按键映射到“构建项目”(增量编译和复制资源),只要我希望反射(reflect)我的更改,我就会调用它
如果您不使用 IDE,则需要有一些东西来为您更新类路径。我们尝试过支持这种开箱即用的功能,但结果却相当复杂。有a comment to help you if you're using Gradle .
关于java - Spring Boot 2.1 中热重载 Thymeleaf 模板和资源包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54845023/