【问题标题】:Live reload for thymeleaf template百里香模板的实时重新加载
【发布时间】:2020-02-05 02:17:20
【问题描述】:

当我更改 /templates 中的 thymeleaf .html 文件时,我希望浏览器自动重新加载页面。我安装了 live reload 插件,它能够与 spring boot 服务器握手。但是,在更改 thymeleaf 模板文件后,我必须手动重新加载浏览器。 任何我可能遗漏的建议。显然我启用了spring-boot-devtools,并且还手动更新了属性devtools.livereload.enabled = true。并且 spring devtools 正确反映了对构建目标中任何模板或控制器的更改,并且通过手动重新加载浏览器,我看到了更改。

根据 spring 文档。

某些资源在更改时不一定需要触发重启。例如,Thymeleaf 模板可以就地编辑。默认情况下,更改 /META-INF/maven、/META-INF/resources、/resources、/static、/public 或 /templates 中的资源不会触发重新启动,但会触发 live reload

我的本​​地运行在一个损坏的 https 上。 (一些证书问题,导致 chrome 地址栏中出现 not secure 消息。这可能是实时重新加载无法正常工作的原因。

【问题讨论】:

标签: spring thymeleaf livereload spring-boot-devtools spring-boot-2


【解决方案1】:

在 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 时:

【讨论】:

  • 这是这个问题的正确答案。
【解决方案2】:

经过 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)。

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

【讨论】:

    【解决方案3】:

    编辑:

    您可以启用浏览器的自动重新筛选,例如一个实时重新加载插件。你可以使用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 后无需重新启动应用程序服务器。这并不意味着您会像在angular 中那样从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

    【讨论】:

    • 那不是真的,我在我的问题的引文中添加了一个超链接,以明确 Spring 团队所说的“实时重新加载”是什么意思,就像在原始 Spring 文档中一样。您应该能够在这里看到您自己的解释中的矛盾,或者只需点击您的第二个链接。这个过度炒作的just worksENTERPRISE 框架的问题在于,您必须花费数小时试图使其正常工作。 facebook 可以用 php 编写 facebook,而 google 也不使用 enterprise 解决方案,任何其他堆栈、rails、play 都比这个恐龙更多 just works
    • 你试过浏览器插件吗?成功了吗?顺便说一句,尽管 spring 框架是一个独立的世界,但使用 spring boot 和自动配置让生活变得更加轻松。
    • 是的,我在问题中提到浏览器插件与实时重新加载服务器成功握手。我不在乎在他们的 github 上提出一个错误,因为它会像他们已经关闭的 17000 个其他错误一样被关闭。没有一个受人尊敬的开源项目在他们的 github 上有 17000 个错误。让生活变得轻松?也许如果它仍然是 2010 年。
    猜你喜欢
    • 2015-11-29
    • 2013-02-03
    • 2015-06-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多