Spring DevTools
LiveReload ist ein kleines Plugin für den Browser welches über Änderungen an dem Quelltext mitgeteilt bekommt und dafür sorgt, dass die Seite neu im Browser geladen wird. Somit lassen sich Änderungen der Seite sofort erkennen und verkürzt die turn-around Zeiten.
LiveReload benötigt einen Server welcher über ein einfaches Protokoll dem Plugin Änderungen anzeigt. Fügt man die Devtools als Dependency in dem Spring Projekt ein, so wird dieser automatisch beim Starten der Application gestartet. Es ist keine weitere Konfiguration nötig.
Installation des Browser Plugins
Plugin Chrome Plugin Firefox
Spring Dependency
Im Gradle Buildskript muss nur zur Runtime DevTools eingebunden werden.
dependencies {
runtimeOnly('org.springframework.boot:spring-boot-devtools')
}
Sinnvolle Properties werden automatisch gesetzt
Wenn DevTools geladen werden, dann werden auch gleich einige Properties automatisch angepasst. Dieses geschied in der Klasse https://github.com/spring-projects/spring-boot/blob/v2.0.6.RELEASE/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsPropertyDefaultsPostProcessor.java. Die Klasse implementiert einen EnvironmentPostProcessor. Hier wird über die @Order Annotation die niedrigste Ordered.LOWEST_PRECEDENCE gewählt, so dass die Properties Vorrang haben und andere Defaultwerte überschreiben.
spring.thymeleaf.cache=false
spring.freemarker.cache=false
spring.groovy.template.cache=false
spring.mustache.cache=false
server.servlet.session.persistent=true
spring.h2.console.enabled=true
spring.resources.cache.period=0
spring.resources.chain.cache=false
spring.template.provider.cache=false
spring.mvc.log-resolved-exception=true
server.servlet.jsp.init-parameters.development=true
spring.reactor.stacktrace-mode.enabled=true
Das heißt für die oben gelisteten sinnvollen Properties muss man keine gesonderte Properties Datei anlegen, die nur in der Entwicklungsumgebung eingebunden wird.
DevTools remote benutzen
Per Default kann man die DevTools nicht remote verwenden. Die DevTools sollten auch nicht in Produktiv Umgebungen genutzt werden, aber es kann hilfreich sein sie in PreProduction Environments zur Fehlersuche zu nutzen.
bootWar {
excludeDevtools = false
}
Siehe Beschreibung [https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#packaging-executable-configuring-excluding-devtools](Excluding DevTools in Packaging).
Zusätzlich lässt sich über
spring.devtools.remote.secret=meingeheimnis
ein Passwort setzen.
Disable Live-Reload Server
Das Starten des Live-Relaod Servers kann auch gesteuert werden. Hierfür wird die Property
spring.devtools.livereload.enabled=false
genutzt.
Kommerzielle Variante
JRebel von zerroturnaround kann nicht nur die Änderungen am Quelltext deployen, sondern zusätzlich auch z.B. externe Jars, die als Abhängigkeiten vom Projekt eingefügt sind. Diese Funktionalität bietet das Duo nicht, dafür ist es eine einfache und kostenlose Alternative.