Übersicht über die Spring-Boot-Entwicklungstools
1. Einführung
Spring Boot gibt uns die Möglichkeit, Dienste schnell einzurichten und auszuführen.
Um die Entwicklungserfahrung weiter zu verbessern, hat Spring das Tool spring-boot-devtools veröffentlicht - als Teil von Spring Boot-1.3. In diesem Artikel wird versucht, die Vorteile zu erläutern, die mit der neuen Funktionalität erzielt werden können.
Wir werden die folgenden Themen behandeln:
-
Eigenschaftsvorgaben
-
Automatischer Neustart
-
Live Reload
-
Globale Einstellungen
-
Remote-Anwendungen
1.1. Fügen Sie Spring-Boot-Devtools in ein Projekt ein
Das Hinzufügen vonspring-boot-devtools in einem Projekt ist so einfach wie das Hinzufügen eines anderen Spring-Boot-Moduls. Fügen Sie in einem vorhandenen Spring-Boot-Projekt die folgende Abhängigkeit hinzu:
org.springframework.boot
spring-boot-devtools
2. Eigenschaftsstandards
Spring-Boot führt viele Autokonfigurationen durch, einschließlich der standardmäßigen Aktivierung des Caching, um die Leistung zu verbessern. Ein solches Beispiel ist das Zwischenspeichern von Vorlagen, die von Vorlagen-Engines verwendet werden, z. thymeleaf. Während der Entwicklung ist es jedoch wichtiger, die Änderungen so schnell wie möglich zu sehen.
Das Standardverhalten des Caching kann fürthymeleaf mithilfe der Eigenschaftspring.thymeleaf.cache=false in der Dateiapplication.properties deaktiviert werden. Wir müssen dies nicht manuell tun. Die Einführung diesesspring-boot-devtools erledigt dies automatisch für uns.
3. Automatischer Neustart
In einer typischen Anwendungsentwicklungsumgebung würde ein Entwickler einige Änderungen vornehmen, das Projekt erstellen und die Anwendung bereitstellen / starten, damit neue Änderungen wirksam werden, oder versuchen,JRebel usw. zu nutzen.
Mitspring-boot-devtools, wird dieser Prozess ebenfalls automatisiert. Wenn sich Dateien im Klassenpfad ändern, wird bei Anwendungen, diespring-boot-devtools verwenden, die Anwendung neu gestartet. Der Vorteil dieser Funktion liegt in der Zeit, die für die Überprüfung der vorgenommenen Änderungen benötigt wird.
19:45:44.804 ... - Included patterns for restart : []
19:45:44.809 ... - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/]
19:45:44.810 ... - Matching URLs for reloading : [file:/.../target/test-classes/, file:/.../target/classes/]
:: Spring Boot :: (v1.5.2.RELEASE)
2017-03-12 19:45:45.174 ...: Starting Application on machine with PID 7724 (\target\classes started by user in )
2017-03-12 19:45:45.175 ...: No active profile set, falling back to default profiles: default
2017-03-12 19:45:45.510 ...: Refreshing org.springframework.boot[email protected]385c3ca3: startup date [Sun Mar 12 19:45:45 IST 2017]; root of context hierarchy
Wie in den Protokollen zu sehen ist, ist der Thread, der die Anwendung erzeugt hat, keinmain, sondern einrestartedMain Thread. Alle im Projekt vorgenommenen Änderungen, sei es eine Änderung der Java-Datei, führen zu einem automatischen Neustart des Projekts:
2017-03-12 19:53:46.204 ...: Closing org.springframework.boot[email protected]385c3ca3: startup date [Sun Mar 12 19:45:45 IST 2017]; root of context hierarchy
2017-03-12 19:53:46.208 ...: Unregistering JMX-exposed beans on shutdown
:: Spring Boot :: (v1.5.2.RELEASE)
2017-03-12 19:53:46.587 ...: Starting Application on machine with PID 7724 (\target\classes started by user in )
2017-03-12 19:53:46.588 ...: No active profile set, falling back to default profiles: default
2017-03-12 19:53:46.591 ...: Refreshing org.springframework.boot[email protected]acaf4a1: startup date [Sun Mar 12 19:53:46 IST 2017]; root of context hierarchy
4. Live Reload
Das Modulspring-boot-devtoolsenthält einen eingebetteten LiveReload-Server, mit dem eine Browseraktualisierung ausgelöst wird, wenn eine Ressource geändert wird.
Damit dies im Browser geschieht, müssen wir das LiveReload-Plugin installieren. Eine solche Implementierung istRemote Live Reload für Chrome.
5. Globale Einstellungen
spring-boot-devtools bietet eine Möglichkeit, globale Einstellungen zu konfigurieren, die keiner Anwendung zugeordnet sind. Diese Datei heißt.spring-boot-devtools.properties und befindet sich bei $ HOME.
6. Remote-Anwendungen
6.1. Remote-Debugging über HTTP (Remote-Debug-Tunnel)
spring-boot-devtools bietet sofort einsatzbereite Remote-Debugging-Funktionen über HTTP. Um diese Funktion nutzen zu können, müssenspring-boot-devtools als Teil der Anwendung gepackt sein. Dies kann erreicht werden, indem die Konfiguration vonexcludeDevtoolsim Plugin in Maven deaktiviert wird.
Hier ein kurzes Beispiel:
org.springframework.boot
spring-boot-maven-plugin
false
Damit das Remote-Debugging über HTTP funktioniert, müssen folgende Schritte ausgeführt werden:
-
Eine Anwendung, die auf dem Server bereitgestellt und gestartet wird, sollte mit aktiviertem Remote-Debugging gestartet werden:
-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n
Wie wir sehen können, wird der Remote-Debugging-Port hier nicht erwähnt. Daher wählt Java einen zufälligen Port
-
Öffnen Sie für dasselbe ProjektLaunch configurations und wählen Sie die folgenden Optionen aus: Hauptklasse auswählen:org.springframework.boot.devtools.RemoteSpringApplication Fügen Sie in Programmargumenten die URL für die Anwendung hinzu, z. http://localhost:8080
-
Der Standardport für den Debugger über die Spring-Boot-Anwendung ist 8000 und kann überschrieben werden über:
spring.devtools.remote.debug.local-port=8010
-
Erstellen Sie nun eine Remote-Debug-Konfiguration und richten Sie den Port als8010 ein, wie über Eigenschaften oder8000 konfiguriert, wenn Sie die Standardeinstellungen beibehalten
So sieht das Protokoll aus:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \
\\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) )
' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / /
=========|_|==============|___/===================================/_/_/_/
:: Spring Boot Remote :: (v1.5.2.RELEASE)
2017-03-12 22:24:11.089 ...: Starting RemoteSpringApplication v1.5.2.RELEASE on machine with PID 10476 (..\org\springframework\boot\spring-boot-devtools\1.5.2.RELEASE\spring-boot-devtools-1.5.2.RELEASE.jar started by user in project)
2017-03-12 22:24:11.097 ...: No active profile set, falling back to default profiles: default
2017-03-12 22:24:11.357 ...: Refreshing org.spring[email protected]11e21d0e: startup date [Sun Mar 12 22:24:11 IST 2017]; root of context hierarchy
2017-03-12 22:24:11.869 ...: The connection to http://localhost:8080 is insecure. You should use a URL starting with 'https://'.
2017-03-12 22:24:11.949 ...: LiveReload server is running on port 35729
2017-03-12 22:24:11.983 ...: Started RemoteSpringApplication in 1.24 seconds (JVM running for 1.802)
2017-03-12 22:24:34.324 ...: Remote debug connection opened
6.2. Remote-Update
Der Remote-Client überwacht den Anwendungsklassenpfad auf Änderungen, wie dies auch für die Remote-Neustartfunktion der Fall ist. Bei jeder Änderung des Klassenpfads wird die aktualisierte Ressource an die Remoteanwendung übertragen und ein Neustart ausgelöst.
Änderungen werden übertragen, wenn der Remoteclient aktiv ist, da die Überwachung auf geänderte Dateien nur dann möglich ist.
So sieht das in den Protokollen aus:
2017-03-12 22:33:11.613 INFO 1484 ...: Remote debug connection opened
2017-03-12 22:33:21.869 INFO 1484 ...: Uploaded 1 class resource
7. Fazit
In diesem kurzen Artikel haben wir gerade gezeigt, wie wir das Modulspring-boot-devtools nutzen können, um die Entwicklererfahrung zu verbessern und die Entwicklungszeit durch die Automatisierung vieler Aktivitäten zu verkürzen.