Статьи

Spring Boot и Thymeleaf: перезагрузка шаблонов и статических ресурсов без перезапуска приложения

Thymeleaf был разработан на основе концепции естественных шаблонов, которая допускает статическое прототипирование: шаблонная логика не влияет на использование шаблона в качестве прототипа. Несмотря на то, что это отличный метод, вы также можете увидеть результаты в работающем приложении Spring Boot и без перезапуска сервера каждый раз, когда вы меняете представление Thymeleaf. Кроме того, вы можете ожидать, что все другие статические ресурсы, такие как файлы JavaScript и CSS, также могут быть перезагружены во время разработки. Как этого добиться с помощью Spring Boot?

Перезагрузка шаблонов Thymeleaf

При работе с приложением Spring Boot, использующим механизм представления Thymeleaf, для обеспечения перезагрузки шаблонов необходимы два свойства: spring.thymeleaf.cache и spring.thymeleaf.prefix . Если для параметра spring.thymeleaf.cache установлено spring.thymeleaf.cache false кэширование шаблонов отключается, тогда как spring.thymeleaf.prefix позволяет указывать префикс, который добавляется к имени представления при создании URL-адреса представления.

Пример (Windows):

1
spring.thymeleaf.prefix=file:///C:/Projects/github/spring-boot-thymeleaf/src/main/resources/templates/

Предполагая, что все шаблоны находятся в указанном пути, изменение их потребует обновления страницы, но не перезапуска приложения / сервера.

Оба свойства можно использовать в профиле разработки (например, создать application-dev.properties и запустить приложение с активным профилем dev ).

Перезагрузка статических ресурсов (CSS, JavaScript)

С Spring Boot и Thymeleaf перезагрузка шаблонов во время разработки относительно проста. Если вы хотите добиться перезагрузки статических ресурсов, таких как CSS и JavaScript, подход очень похож: вам нужно использовать spring.resources.static-locations .

Пример (Windows):

1
spring.resources.static-locations=file:///C:/Projects/github/spring-boot-thymeleaf//src/main/resources/static/

В приведенном выше примере есть одно местоположение, но свойство принимает несколько местоположений.

Кроме того, вы можете настроить дополнительные параметры, относящиеся к статическим ресурсам, таким как, например, кэширование и т. Д. Пожалуйста, обратитесь к документации Spring Boot и узнайте о свойствах spring.resources.* ( spring.resources.* /current/reference/html/common-application-properties.html )

application-dev.properties

Окончательное решение может выглядеть следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
#
# Development profile with templates and static resources reloading
#
 
# Path to project
project.base-dir=file:///C:/Projects/github/spring-boot-thymeleaf
 
# Templates reloading during development
spring.thymeleaf.prefix=${project.base-dir}/src/main/resources/templates/
spring.thymeleaf.cache=false
 
# Static resources reloading during development
spring.resources.static-locations=${project.base-dir}/src/main/resources/static/
spring.resources.cache-period=0

Примечание: вы найдете его в ссылке на исходный код в этой статье: HOW-TO: Spring Boot и Thymeleaf с Maven

Если вы не хотите создавать новый профиль, вы можете просто предоставить свойства в качестве параметров JVM ( -D ) при запуске приложения.

Альтернативный подход — Spring Boot DevTools

Одним из модулей Spring Boot является DevTools (начиная с версии 1.3). Среди многих функций это позволяет в реальном времени перезагрузить шаблоны Thymeleaf и статические ресурсы без дальнейшей настройки. Он также поддерживает протокол LiveReload.

Примечание . При изменении шаблона / ресурса перестройте проект (CTRL + F9 в Windows), а затем обновите. При установке плагина LiveReload (я тестировал с плагином LiveReload для Chrome: https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei ) после перестройки страница обновляется автоматически.

Узнайте больше здесь: https://spring.io/blog/2015/06/17/devtools-in-spring-boot-1-3 и здесь: https://t.co/td23nP73mt

Резюме

Благодаря методам, описанным в этой статье, вы можете значительно упростить разработку внешнего интерфейса приложения Spring Boot. Но возможность обслуживания шаблонов Thymeleaf и статических ресурсов вашего приложения Spring Boot из-за пределов classpath в производстве также может принести некоторые преимущества. Одним из примеров может быть разделение внутренних и внешних развертываний.

Смотрите также