Da Springboot ein Microservice -Framework ist, muss die Produktionsbereitstellungsmethode so einfach wie möglich sein, was ein großer Unterschied zu herkömmlichen Webanwendungen ist. Es kann einen Webcontainer wie Tomcat, Jetty usw. einbetten und die Anwendung nicht mehr in ein vom Container angegebener Formular verpacken.
Für Springboot kann es gestartet werden, wenn Springboot in ein einfaches JAR -Paket verpackt und direkt mit Java -Jar verwendet werden kann. Dies ist eine sehr elegante Art und Weise, aber es bringt auch bestimmte Probleme mit sich, z. B.: Wie kann die Anwendung gestoppt werden? In der Vergangenheit wurden Anwendungen in bestimmten Containern eingesetzt, und die vom Container bereitgestellten Skripte könnten elegant eingestellt werden, aber jetzt ist der Container eingebettet und die Skripte sind weg. Was soll ich tun? Direktes Töten ist ein Weg, aber es scheint zu unhöflich und kann viele unerwartete Probleme bringen.
Da wir uns Probleme vorstellen können, werden die Rahmenhersteller dann Lösungen für uns vorbereitet? Es gibt Ja und ich werde einige Lösungen vorstellen, die ich unten gelernt habe.
1. Verwenden Sie Endpunkte
In Teil 4 der offiziellen Dokumentation von Springboot werden verschiedene Funktionen für die Produktion von Anwendungen eingeführt. Unter ihnen können Entwickler durch den HTTP -Endpunkt des Aktuators Anwendungen problemlos überwachen und verwalten.
Stellen Sie das angegebene Starterpaket vor:
"org.springframework.boot: Spring-Boot-Starter-Actuator: $ {Springbootversion}"Öffnen Sie die folgenden zwei Konfigurationen in application.yml, um die Anwendung über die HTTP -Anforderung zu stoppen
Verwaltung: Sicherheit: Aktiviert: Falseendpoints: Herunterfahren: aktiviert: true
Die Operationsbefehle sind wie folgt:
curl -x post http: // host: port/stilldown
Diese Methode hat jedoch ein sehr ernstes Problem, dh jeder kann den Stopp der Anwendung steuern, was für eine Produktionsanwendung zweifellos nicht akzeptabel ist. Einige Leute denken vielleicht, dass die Linkadresse jetzt zu einfach ist, und Nicht-Maschiner können leicht erraten, ob dieses Problem vermieden werden kann, wenn eine sehr komplexe Adresse verwendet wird. Sehr gut, dieser Vorschlag ist gut. Schauen wir uns die relevanten Konfigurationen an, die Springboot bereitstellen.
Endpunkte: Herunterfahren: Aktiviert: True Pfad: /xxx
Nach Abschluss der Konfiguration ist der obige Befehl nicht mehr verfügbar. Der Befehl muss aktualisiert werden als:
curl -x post http: // host: port/xxx
Natürlich /xxx ist nur eine, die ich beiläufig festgelegt habe. Sie können jede Adresse festlegen. Obwohl die Sicherheit etwas höher ist, ist ein solches Sicherheitsniveau immer noch nicht verfügbar, um auf die Produktionsumgebung angewendet zu werden. Gibt es also andere Schutzmaßnahmen? Ja, zusätzlich zur Änderung des Shutdown -Pfades können wir allen Verwaltungsvorgängen einen einheitlichen Kontext hinzufügen, unabhängige Ports konfigurieren und den festgelegten IP -Zugriff (normalerweise auf native Maschine beschränkt) einschränken. Die Konfiguration ist wie folgt:
Verwaltung: Sicherheit: Aktiviert: Falsch Port: 9001 Adresse: 127.0.0.1 Kontext-Path: /admin
Der geänderte Befehl service stillschaltungsbefehl lautet:
curl -x post http://127.0.0.1:9001/admin/xxx
Dies ist tatsächlich sicher genug. Um die Sicherheit des Systems weiter zu gewährleisten, fügen Sie eine Ebene von HTTP Basic Auth.
Sicherheitsabhängigkeiten erhöhen:
"org.springframework.boot: Spring-Boot-Starter-Security: $ {Springbootversion}"Ändern Sie die Konfigurationsdatei wie folgt:
Endpunkte: Shutdown: Aktiviert: TRUE PATH: /xxxManmanagement: Sicherheit: Aktiviert: True Port: 9001 Adresse: 127.0.0.1 Kontext-Path: /Adminscurity: Basic: aktiviert: True Pfad: /admin Benutzer: Name: Root Passwort: 123456
Nach Abschluss der Konfiguration lautet der endgültige Abbruchbefehl:
curl -x post -U root: 123456 http://127.0.0.1:9001/admin/xxx
2. Registrieren Sie sich als Systemdienst
Zusätzlich zur Ausführung von Springboot -Anwendungen mit Java -Jar können Sie sich einfach als Linux/UNIX -Systemdienst mit Init.d oder systemd registrieren, wodurch die Installation und Verwaltung von Springboot -Anwendungen in einer Produktionsumgebung sehr einfach ist.
Im Maven-Projekt müssen die folgenden Plug-Ins eingeführt werden, um ein "vollständig ausführbares" Glas zu erstellen:
<plugin> <gruppe> org.springframework.boot </GroupId> <artifactId> Spring-Boot-Maven-Plugin </artifactid> <version> 1.5.2.Release </Version> <Configuration> <ausführbar> true </ausführbar> </konfiguriert
Im Gradle -Projekt lautet die äquivalente Konfiguration wie folgt:
Plugins {id 'org.springframework.boot' Version '1.5.2.Release'} Springboot {execute = true}Nach Abschluss der Konfiguration können Sie die erstellte Anwendung über ./Application-name.jar ausführen.
Schließlich müssen wir die verpackte Anwendung in einem Init.D -Dienst installieren, damit sie mit UNIX/Linux einfach verwaltet werden kann. Die Betriebsmethode ist sehr einfach. Sie müssen die Anwendung nur einfach mit init.d verknüpfen (wobei Funda mein eigener Anwendungsname ist, und Sie müssen sie nach der Situation beim Experimentieren ersetzen).
ln -s /app/funda/funda.jar /etc/init.d/funda
Überprüfen Sie, ob der Link erfolgreich festgelegt ist
ls -l /etc/init.d/funda
Starten Sie den Dienst, und das Anwendungsprotokoll kann die Datei /var/log/funda.log anzeigen
Service Funda Start
Andere gemeinsame Befehle
# Überprüfen Sie die Anwendungsstatus -Service -Funda -Status.
Zusammenfassung der Fragen:
Nachdem der Link erfolgreich ist, kann die Anwendung nicht erfolgreich gestartet werden. Es wird aufgefordert, Java nicht zu finden. Verwenden Sie den folgenden Befehl, um den Befehl JDK Java mit /sbin /java zu verknüpfen.
ln -s /usr/local/jdk1.8.0_131/bin/java/sbin/java
Referenzlink:
Endpunkte
Überwachung und Verwaltung über HTTP
UNIX/Linux -Dienste
Java #5690 kann nicht finden
Projektlink:
Github: https://github.com/qchery/funda
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.