Viele Internetnutzer werden mich von Zeit zu Zeit fragen, wie man das Spring Boot -Projekt testet, wie man es bereitstellt und ob es gute Bereitstellungslösungen in der Produktion gibt. In diesem Artikel wird vorgestellt, wie Spring Boot entwickelt, debugged, verpackt und schließlich in Produktion und Start eingesetzt wird.
Entwicklungsphase
Unit -Tests
Das Wichtigste während der Entwicklungsphase ist die Einheitstests. Die Unterstützung von Springboot für Unit -Tests wurde perfektioniert.
1. Fügen Sie das Paketverweis für den Feder-Boot-Starter-Test zum POM-Paket hinzu
<Depopentcy> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Test </artifactId> <Scope> Test </Scope> </abhängig>
2. Entwicklung und Test
Wenn Sie als Beispiel die einfachste HelloWorld nehmen, müssen Sie hinzufügen: @runwith (Springrunner.class) und @springboottest Anmerkungen zum Klassenleiter der Testklasse. Fügen Sie einfach @Test oben in der Testmethode hinzu und klicken Sie schließlich mit der rechten Maustaste auf die ausführende Methode.
@Runwith (springrunner.class) @springBoottestPublic class ApplicationTests {@test public void hello () {System.out.println ("Hello World"); }}Im tatsächlichen Gebrauch können Sie den DAO -Layer -Code oder Service -Layer -Code gemäß der normalen Verwendung des Projekts zum Testen und Überprüfungen injizieren. Der Frühling-Boot-Starter-Test bietet viele grundlegende Verwendungen, und noch seltener ist, dass es Unterstützung für die Tests von Controller-Schicht erhöht.
// Überprüfen Sie einfach, ob das Ergebnissatz korrekt ist. Assertequals (3, userMapper.getall (). Size ()); // Überprüfen Sie die Ergebnisset, Eingabeaufforderung. AssertRue ("Fehler, der korrekte Rückgabewert ist 200", Status == 200); Assert.assertFalse ("Fehler, der korrekte Rückgabewert ist 200", Status! = 200);MOCKMVC wird eingeführt, um die Prüfung der Controller -Schicht zu unterstützen. Das einfache Beispiel ist wie folgt:
öffentliche Klasse HellocontrolerTests {private mockmvc MVC; // Initialisieren Sie die Ausführung @before public void setup () löst eine Ausnahme aus {mvc = mockmvcbuilders.Standalonesetup (neuer Hellocontroller ()). Build (); } // Überprüfen Sie, ob der Controller normal reagiert und das Rückgabeergebnis @test public void gethello () Ausnahme auslöst. .anddo (mockmvcresultHandlers.print ()) .andReturn (); } // Überprüfen Sie, ob der Controller normal antwortet und feststellt, ob das Rückgabeergebnis korrekt ist. .Andexect (content (). String (EqualTo ("Hallo"). Accept (mediateType.Application_json)) .andexect (status (). isok () .AndExep (content (). String (EqualTo ("Hello World");}}Unit -Tests sind die erste Barriere, um Ihren Code zu überprüfen. Sie sollten die Angewohnheit von Unit -Tests jedes Mal entwickeln, wenn Sie einen Teil Ihres Codes schreiben. Warten Sie nicht, bis alle vor dem Testen integriert sind. Nach der Integration ist es einfach, die Fehler am Ende des Codes zu verpassen, da Sie dem Gesamtbetriebseffekt mehr Aufmerksamkeit schenken.
Integrationstests
Nach Abschluss der Gesamtentwicklung wird der Integrationstest eingegeben. Der Starteingang des Spring Boot -Projekts befindet sich in der Anwendungsklasse. Sie können das Projekt starten, indem Sie die Run -Methode direkt ausführen. Während des Debugging -Prozesses müssen wir jedoch den Code ständig debuggen. Wenn Sie den Dienst jedes Mal, wenn der Code geändert wird, manuell neu starten müssen, ist dies sehr problematisch. Spring Boot bietet sehr beträchtliche Support -Support, was für das Debuggen und die Verwendung in Webprojekten sehr bequem ist.
POM muss die folgende Konfiguration hinzufügen:
<Depelencies> <De vorstellen> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Devtools </artifactId> <option> true </optional> </abhängig> </abhängig> <builds <artifactid> Spring-Boot-Maven-Plugin </artifactId> <configuration> <dargs> true </fork> </configuration> </plugin> </plugins> </build>
Nach dem Hinzufügen der oben genannten Konfiguration unterstützt das Projekt die Hot Deployment, die für Integrationstests sehr bequem ist.
Produktion gehen und online gehen
Tatsächlich denke ich, dass diese Phase relativ einfach sein sollte und allgemein in zwei Typen unterteilt sein sollte: Eine besteht darin, sie in ein JAR -Paket zu packen und direkt auszuführen, und das andere besteht darin, es in ein Kriegspaket zu verpacken und unter den Tomcat -Server zu setzen.
Machen Sie es in ein JAR -Paket
Wenn Sie Maven zum Verwalten Ihres Projekts verwenden, führen Sie den folgenden Befehl aus
CD -Projekt und Verzeichnis (gleiche Ebene wie pom.xml) MVN Clean Package ## oder führen Sie den folgenden Befehl aus, um den Testcode und das Paket MVN Clean Package -dmaven.test.skip = true auszuschließen
Nach Abschluss der Verpackung wird das JAR -Paket im Zielverzeichnis generiert. Der Name ist normalerweise der Projektname + Versionsnummer.jar
Starten Sie den Befehl jar paket
Java-Jar Target/Spring-Boot-Scheduler-1.0.0.jar
Auf diese Weise ist der Service nicht zugänglich, solange die Konsole geschlossen ist. Beginnen wir die folgende, indem wir im Hintergrund laufen:
Nohup Java-Jar Target/Spring-Boot-Scheduler-1.0.0.jar &
Sie können beim Starten auch verschiedene Konfigurationsdateien lesen
java -jar app.jar --spring.profiles.active = dev
Sie können auch JVM -Parameter beim Start einstellen
Java -xms10m -xmx80m -jar App.jar & Gradle
Wenn Sie Gradle verwenden, verwenden Sie den folgenden Befehl zum Paket
Gradle Buildjava-Jar Build/libs/MyModule-0.0.1-Snapshot.jar
Machen Sie es in eine Kriegstasche
Der erste Typ kann verwendet werden, um das Kriegspaket durch die Eclipse für Entwicklungstools zu exportieren. Der andere Typ besteht darin, Befehle zu verwenden, um es zu vervollständigen. Hier stellen wir vor allem letztere vor.
1. Maven Project, ändern Sie das POM -Paket
Wille
<Packages> jar </packaging>
Wechseln zu
<Packages> Krieg </packaging>
2. Tomcat bei Verpackung ausschließen.
<Depepecy> <GroupId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> <Depopentcy> <gruppe> org.
Setzen Sie hier die SCOPE -Eigenschaft auf die Bereitstellung, damit das JAR -Paket nicht in den letzten Krieg enthalten ist, da Server wie Tomcat oder Jetty zur Laufzeit relevante API -Klassen bereitstellen.
3. Registrieren Sie die Startklasse
Erstellen Sie servletinitializer.java, inherit SpringbootServletinitializer, Override configure () und registrieren Sie die Anwendung der Startkurs. Wenn ein externer Webanwendungsserver einen Webanwendungskontext erstellt, wird die Startklasse hinzugefügt.
public class servletinitializer erweitert SpringbootServletInitializer {@Override Protected SpringApplicationBuilder configure (SpringApplicationBuilder -Anwendung) {return application.sources (application.class); }}Endgültige Ausführung
MVN Clean Package -dmaven.test.skip = true
Die Projektname + Versionsnummer.war -Datei wird im Zielverzeichnis generiert und kopiert sie auf den Tomcat -Server, um zu starten.
Gradle
Wenn Sie Gradle verwenden, ist der Grundschritt der gleiche. Fügen Sie Kriegsunterstützung in build hinzu. Gradle und ausschließen Spring-Boot-Starter-Tomcat:
... Plugin anwenden: 'War' ... Abhängigkeiten {Compile ("org.springframework.boot: Spring-Boot-Starter-Web: 1.4.2.Release") {MyModule ausschließen: "Spring-Boot-Starter-Tomcat"}} ...Verwenden Sie den Befehl Build erneut
Gradle Build
Der Krieg wird im Verzeichnis für Build/LIBS erzeugt.
Produktionsbetrieb und Wartung
Zeigen Sie den Wert der JVM -Parameter an
Sie können dem mit Java gelieferten Jinfo -Befehl folgen:
jinfo -flags pid
Mal sehen, was GC nach Beginn des Glass verwendet wird, wie viel Speicher in Chargen in der neuen Generation und älteren Menschen ist. Die Beispiele sind wie folgt:
-Xx: cicompilerCount = 3 -xx: initialheapsize = 234881024 -xx: maxheapsize = 3743416320 -xx: maxnewSize = 1247805440 -xx: minheapdeltAbytes = 524288 -xx: = 156288 -xx: usw. -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC-XX:CICompilerCount : Maximum parallel compiles -XX:InitialHeapSize and -XX:MaxHeapSize: Specify the initial and maximum heap memory size of the JVM -Xx: MaxNewSIZE: Maximale zuweisbare Größe für die neue Speichergeneration im JVM Heap -Bereich ... -xx:+UseParallelGC: Müllsammlung verwendet Parallel Collector
Wie man neu startet
Einfach und grob
Töten Sie den Prozess direkt und starten Sie das JAR -Paket erneut
PS -f | Grep Java ## Holen Sie sich den Pidkill für Java -Programm -9 PID ## Neustart Java erneut -Jar xxxx.jar
Natürlich ist diese Methode traditioneller und gewalttätiger, daher wird empfohlen, dass Sie die folgende Methode verwenden, um sie zu verwalten
Skriptausführung
Wenn Sie Maven verwenden, müssen Sie die folgende Konfiguration einfügen
<plugin> <gruppe> org.springframework.boot </Groupid> <artifactID> Spring-Boot-Maven-Plugin </artifactid> <configuration> <ausführbar> true </ausführbar> </configuration> </plugin>
Wenn Sie Gradle verwenden, müssen Sie die folgende Konfiguration einfügen
Springboot {execute = true}Start -up -Methode:
1. Sie können direkt in ./yourapp.jar beginnen
2. Registrieren Sie sich als Service
Sie können auch einen sanften Link erstellen, um auf Ihr JAR -Paket zu verweisen und zu init.d hinzuzufügen und ihn dann mit Befehlen zu starten.
Init.d Beispiel:
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourappchmod +x /etc/init.d/yourapps
Auf diese Weise können Sie den Befehl Stop oder Neustart verwenden, um Ihre Anwendung zu verwalten.
/etc/init.d/yourapp starten | stop | neu starten
oder
Service YourApp Start | Stop | Neustart
Zu diesem Zeitpunkt wurden der Test, die gemeinsame Koordination und Verpackung von Springboot -Projekten eingeführt. Sie können Zeit finden, um den automatisierten Betrieb und die Wartung von Springboot und die Kombination aus Springboot und Docker zu untersuchen.
Beispielcode - GitHub
Beispielcode-Code-Cloud
Zusammenfassen
Die oben genannte Methode der Spring -Boot -Testverpackung und Bereitstellung, die Ihnen vom Editor vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!