我创建了一个启用了i18n的Spring Boot 2.1.3应用程序,添加了devtools,并安装了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>
我在messages.properties
中添加了一个src/main/resources
文件:
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模板和消息包的缓存吗?
答案 0 :(得分:2)
Devtools将禁用缓存,以便在需要再次呈现模板文件时可以重新考虑对模板文件的更新。
但是,当您的应用程序在JVM进程中启动时,没有任何指向您的源文件的信息,它只能看到类路径。因此,对源文件所做的任何更改都需要更新到类路径位置,这通常是通过要求IDE“构建项目”来实现的。
因此模板所缺少的步骤是,如果文档尚不清楚,请随意提出一个建议,因为我们对此进行了很多迭代。
尽管没有关于i18n的具体信息。如果您更改它们并更新类路径,我们将重新启动应用程序,而不是像对模板一样进行重新选择。我们确实曾经尝试对此提供支持,请参见this issue for more details。话虽如此,您不应指望对资源文件的更改将“起作用”。更改配置显然会要求应用程序重启(例如,再次使用devtools时更新类路径)。
一些有关IDE支持的注释:
如果不使用IDE,则需要一些东西来为您更新类路径。我们尝试开箱即用地支持它,但事实证明它相当复杂。有a comment to help you if you're using Gradle。
答案 1 :(得分:0)
将以下内容添加到您的package davidpadillaservice
import grails.testing.services.ServiceUnitTest
import spock.lang.Specification
class SomeResourceServiceSpec extends Specification implements ServiceUnitTest<SomeResourceService>{
void "test interacting with the service"() {
expect:
service.firstLine == 'line number one'
service.secondLine == 'line number two'
}
}
中:
application.properties