Dreamteam: Spring Devtools und Livereload Plugin

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.