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 в производстве также может принести некоторые преимущества. Одним из примеров может быть разделение внутренних и внешних развертываний.