Überblick über Spring-Boot Dev Tools

Ü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

Erstellen Sie das Projekt neu, und Sie sind jetzt in Spring-Boot-Devtools integriert. Die neueste Version kann vonhere abgerufen werden und alle Versionen können vonhere gefunden werden.

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:

  1. 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

  2. Ö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

  3. 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
  4. 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.