8

When I change a thymeleaf .html file residing inside /templates , I expect the browser to automatically reload the page. I have the live reload plugin installed and its able to do a handshake with the spring boot server. However , upon chaning a thymeleaf template file , I have to manually reload the browser. Any suggestions what I might be missing. Obviously I have spring-boot-devtools enabled and have also manually updated the property devtools.livereload.enabled = true. And spring devtools is correctly relecting changes to any template or controller in build target , and with a manual reload of browser , I see the changes.

As per spring docs.

Certain resources do not necessarily need to trigger a restart when they are changed. For example, Thymeleaf templates can be edited in-place. By default, changing resources in /META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates does not trigger a restart but does trigger a live reload.

I have my local running over a broken https. ( Some certificate issue , which causes a not secure message in chrome address bar. Could this be the reason live reload is not working.

4

4 回答 4

10

经过 3 年的挫折,这里是一个工作HOT SWAP的工作解决方案:

https://attacomsian.com/blog/spring-boot-auto-reload-thymeleaf-templates

以下是我测试过的设置(这是我为使其正常工作而进行的唯一更改)。

application.yaml

spring:
  thymeleaf: # Thymeleaf
    cache: false
    mode: HTML
    encoding: UTF-8
    prefix: file:src/main/resources/templates/
  resources: # Static resources
    static-locations: file:src/main/resources/static/
    cache:
      period: 0

它能做什么:

  • 如果您更改了任何内容,则将更改应用于您的视图(和/或静态内容static/templates/
  • 它无需手动编译或重新启动整个 Web 服务器即可执行此操作

它没有什么:

  • 在浏览器中为您重新加载页面(您仍然需要在浏览器中刷新页面;顺便说一句,LiveReload Chrome 扩展程序也不起作用,也许通过一些 webpack 魔法您可以使其工作)

这一切都假设您没有覆盖默认路径(/resources/templates, /resources/static)。

PS 我尝试过使用自签名 TLS 证书,它仍然有效。但是,是的,它不会像 Angular 那样开箱即用地重新加载浏览器页面。

于 2020-08-21T12:47:19.210 回答
6

在 Spring Thymeleaf 中自动重新加载 HTML / CSS / JS 可以简单且无错误,仅在 IntelliJ 中进行了测试。

将此添加到 maven,使用 ${spring.version} var 或替换为您的版本:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <version>${spring.version}</version>
    <optional>true</optional>
    <scope>runtime</scope>
</dependency>

添加到 html 的标题中:

<script src="http://localhost:35729/livereload.js"></script>

使用 IntelliJ 时:

使用 Ctrl+Shift+A 写入注册表

在 IntelliJ 设置中

于 2020-09-20T04:21:45.557 回答
0

我遇到过同样的问题。我在 /src/main/webapp/WEB-INF/templates 中有 Spring Boot 开发工具和模板。我唯一需要做的就是将 spring.thymeleaf.cache 设置为 false。就我而言,我必须在 java 代码中执行此操作。

@Bean
public SpringResourceTemplateResolver templateResolver(){
    // SpringResourceTemplateResolver automatically integrates with Spring's own
    // resource resolution infrastructure, which is highly recommended.
    final SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
    templateResolver.setApplicationContext(this.applicationContext);
    templateResolver.setPrefix("/WEB-INF/templates/");
    templateResolver.setSuffix(".html");
    // HTML is the default value, added here for the sake of clarity.
    templateResolver.setTemplateMode(TemplateMode.HTML);
    // Template cache is true by default. Set to false if you want
    // templates to be automatically updated when modified.
    templateResolver.setCacheable(false);
    templateResolver.setOrder(2);
    return templateResolver;
}

我从 thymeleaf https://github.com/thymeleaf/thymeleafexamples-springmail/blob/3.0-master/src/main/java/thymeleafexamples/springmail/business/SpringMailConfig.java得到了这个示例代码

于 2022-02-14T11:37:02.010 回答
-1

编辑:

您可以使用实时重新加载插件等方式启用浏览器的自动更新。您可以使用http://livereload.com/extensions/

来自官方 Spring Boot 文档的提示在这里:https ://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-livereload

解释为什么它不能开箱即用

我想你在这里混合了东西。对于 Spring Boot 应用程序而言,“实时重新加载”意味着您在编辑 html 后无需重新启动应用程序服务器。这并不意味着您会像angularfrom那样进行热重载webpack dev server

因此,您仍然必须触发浏览器页面的刷新。

有关它在 WDS 中如何工作的更多详细信息,请参见此处:https ://webpack.js.org/concepts/hot-module-replacement/

从春天的角度来看https://docs.spring.io/spring-boot/docs/current/reference/html/howto-hotswapping.html

于 2019-10-08T05:24:49.787 回答