Горячая перезагрузка шаблонов Thymeleaf и ресурсов в Spring Boot 2.1 - PullRequest
0 голосов
/ 23 февраля 2019

Я создал приложение Spring Boot 2.1.3 с включенным i18n, добавил devtools и установил расширение Firefox LiveReload.К сожалению, когда я меняю свои шаблоны Thymeleaf или сообщения i18n, это не меняется. Spring Boot документация , кажется, предлагает все, что вам нужно сделать, это установить 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";
   }
}

Я создал шаблон Thymeleaf на src/main/resources/templates/home.html:

<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.

Все это прекрасно работает.Чтобы включить горячую перезагрузку, я добавил devtools в pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

и установил расширение LiveReload для Firefox .

Я перезапустил свой сервер, включил LiveReloadи перешел к http://localhost:8080. Я попытался изменить и сохранить home.html и messages.properties и обновить свой браузер.Вывод в браузере не меняется.Что еще мне нужно сделать, чтобы отключить кэширование шаблонов Thymeleaf и пакетов сообщений в Spring Boot 2.1?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Devtools отключит кэширование, чтобы можно было пересмотреть обновление файла шаблона при необходимости его повторной визуализации.

Когда ваше приложение запускается в процессе JVM, ничто не указывает на ваши исходные файлыи он может видеть только путь к классам.Поэтому все изменения, которые вы вносите в исходный файл, необходимо обновить в соответствии с расположением пути к классу, что обычно происходит при запросе вашей IDE «Построить проект».

Итак, пропущенный шаг для шаблона заключается в том, чтов документации нет ясности по этому поводу, не стесняйтесь открыть вопрос с предложением, поскольку мы много раз повторяли это.

Хотя в i18n нет ничего конкретного.Если вы измените их и обновите путь к классу, мы перезапустим приложение, а не подберем его так же, как для шаблонов.Мы однажды попытались поддержать это, см. эту проблему для подробностей .Сказав это, вы не должны ожидать, что изменение файла ресурсов "просто сработает".Изменение конфигурации, очевидно, потребует, например, перезапуска приложения (опять же, путем обновления пути к классам при использовании devtools).

Некоторые дополнительные замечания о поддержке IDE:

  • Инкрементное затмениекомпилирует и копирует измененные файлы при «сохранении».Поэтому, если вы сохраните свой шаблон, вам будет хорошо идти
  • IntelliJ IDEA Ultimate имеет выделенную поддержку devtools по состоянию на 2018.1 - если вы сконфигурируете «Отключение по кадру» для «Обновление ресурсов», это будетделать правильные вещи, когда вы переключаетесь на свой браузер.До этой поддержки у меня было специальное нажатие клавиши, сопоставленное «Build Project» (инкрементно компилирует и копирует ресурсы), которое я вызывал всякий раз, когда хотел, чтобы мои изменения были отражены

Если вы не используете IDE,вам нужно что-то, чтобы обновить classpath для вас.Мы пытались поддержать это из коробки, но оказалось довольно сложно. комментарий поможет вам, если вы используете Gradle .

0 голосов
/ 23 февраля 2019

Добавьте следующее к вашему application.properties:

spring.thymeleaf.cache=false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...