Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringBoot2.1中热重新加载Thymeleaf模板和资源包_Java_Spring_Spring Boot_Thymeleaf - Fatal编程技术网

Java 在SpringBoot2.1中热重新加载Thymeleaf模板和资源包

Java 在SpringBoot2.1中热重新加载Thymeleaf模板和资源包,java,spring,spring-boot,thymeleaf,Java,Spring,Spring Boot,Thymeleaf,我创建了一个启用i18n的SpringBoot2.1.3应用程序,添加了devtools,并安装了FirefoxLivereLoad扩展。不幸的是,当我更改Mythymeleaf模板或i18n消息时,它没有更改。似乎建议您只需安装devtools,它将禁用静态资源的缓存 以下是我创建应用程序的步骤: mkdir bootiful-i18n cd bootiful-i18n http https://start.spring.io/starter.zip dependencies==web,thy

我创建了一个启用i18n的SpringBoot2.1.3应用程序,添加了devtools,并安装了FirefoxLivereLoad扩展。不幸的是,当我更改Mythymeleaf模板或i18n消息时,它没有更改。似乎建议您只需安装devtools,它将禁用静态资源的缓存

以下是我创建应用程序的步骤:

mkdir bootiful-i18n
cd bootiful-i18n
http https://start.spring.io/starter.zip dependencies==web,thymeleaf -d | tar xvz
然后我创建了一个HomeController.java:

我在src/main/resources/templates/home.html上创建了一个Thymeleaf模板:

这一切都很好。为了启用热重新加载,我将devtools添加到pom.xml中:

并安装了

我重新启动服务器,启用LiveReload并导航到。我尝试更改并保存home.html和messages.properties,并刷新浏览器。浏览器中的输出不会更改。在Spring Boot 2.1中,是否需要执行其他操作来禁用Thymeleaf模板和消息包的缓存?

将以下内容添加到应用程序中。属性:

将以下内容添加到application.properties:


Devtools将禁用缓存,以便在需要再次呈现模板文件时重新考虑对模板文件的更新

但是,当应用程序在JVM进程中启动时,没有任何东西指向源文件,它只能看到类路径。因此,对源文件所做的任何更改都需要更新到类路径位置,这通常通过要求IDE构建项目来实现

因此,模板缺少的一步是,如果文档对此不清楚,请随时提出建议,因为我们已经反复讨论了很多

不过,关于i18n没有什么特别的。如果您更改它们并更新类路径,我们将重新启动应用程序,而不是像对待模板那样处理这些问题。我们曾经尝试过支持这一点,请参见。话虽如此,您不应该期望对资源文件的更改能够正常工作。对配置的更改显然需要重新启动应用程序,例如,在使用devtools时更新类路径

关于IDE支持的一些补充说明:

Eclipse在保存时以增量方式编译和复制更改的文件。因此,如果您保存了模板,就可以开始了 IntelliJ IDEA Ultimate从2018.1起就已启用-如果您将帧内停用配置为更新资源,则当您切换到浏览器时,它将执行正确的操作。在那个支持之前,我有一个特殊的击键映射到Build Project,它以增量方式编译和复制我希望反映更改时调用的资源
如果您没有使用IDE,那么您需要一些东西来更新类路径。我们曾试图在开箱即用的情况下支持这一点,但结果非常复杂。有。

Devtools将禁用缓存,以便在需要再次呈现模板文件时重新考虑对模板文件的更新

但是,当应用程序在JVM进程中启动时,没有任何东西指向源文件,它只能看到类路径。因此,对源文件所做的任何更改都需要更新到类路径位置,这通常通过要求IDE构建项目来实现

因此,模板缺少的一步是,如果文档对此不清楚,请随时提出建议,因为我们已经反复讨论了很多

不过,关于i18n没有什么特别的。如果您更改它们并更新类路径,我们将重新启动应用程序,而不是像对待模板那样处理这些问题。我们曾经尝试过支持这一点,请参见。话虽如此,您不应该期望对资源文件的更改能够正常工作。对配置的更改显然需要重新启动应用程序,例如,在使用devtools时更新类路径

关于IDE支持的一些补充说明:

Eclipse在保存时以增量方式编译和复制更改的文件。因此,如果您保存了模板,就可以开始了 IntelliJ IDEA Ultimate从2018.1起就已启用-如果您将帧内停用配置为更新资源,则当您切换到浏览器时,它将执行正确的操作。在那个支持之前,我有一个特殊的击键映射到Build Project,它以增量方式编译和复制我希望反映更改时调用的资源
如果您没有使用IDE,那么您需要一些东西来更新类路径。我们曾试图在开箱即用的情况下支持这一点,但结果非常复杂。有。

我最近创建了一个新项目,父项:spring boot starter父项,依赖项:spring boot starter tomcat,spring boot starter thymeleaf,模板在编辑时会刷新。虽然我没有尝试属性,但我必须同时添加spring.thymeleaf.cache和spring.thymeleaf.prefix,以便热重新加载工作。FWIW,当我第一次尝试让事情正常运行时,我正在使用Vi。
可能您正在使用Eclipse或其他在更改文件时自动更新目标目录的工具?我最近创建了一个新项目,父项目:spring boot starter父项目,依赖项目:spring boot starter tomcat、spring boot starter thymeleaf,模板在编辑时会刷新。虽然我没有尝试属性,但我必须同时添加spring.thymeleaf.cache和spring.thymeleaf.prefix,以便热重新加载工作。FWIW,当我第一次尝试让事情正常运行时,我正在使用Vi。也许您正在使用Eclipse或其他在更改文件时自动更新目标目录的工具?感谢Stephane提供的提示。我发现spring.thymeleaf.cache和spring.thymeleaf.prefix都是热重新加载thymeleaf模板所必需的。对于i18n,生成或帧上更新停用都会导致应用程序重新加载。谢谢更正,如果在不使用IDE和类似vi的情况下想要热重新加载,则需要spring.thymeleaf.prefix。spring.thymeleaf.cache似乎没有必要。感谢Stephane提供的提示。我发现spring.thymeleaf.cache和spring.thymeleaf.prefix都是热重新加载thymeleaf模板所必需的。对于i18n,生成或帧上更新停用都会导致应用程序重新加载。谢谢更正,如果在不使用IDE的情况下需要热重新加载,则需要spring.thymeleaf.prefix,而vi.spring.thymeleaf.cache之类的东西似乎并不需要。
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";
   }
}
<html xmlns:th="http://www.thymeleaf.org">
<body>
   <h1 th:text="#{title}"></h1>
   <p th:text="#{message}"></p>
</body>
</html>
title=Welcome
message=Hello! I hope you're having a great day.
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>
spring.thymeleaf.cache=false