wie zu bauen Befehl console im Frühjahr boot-web-Anwendung mit spring-shell?
Habe ich erstellt erholsamen web-Anwendung mit spring-boot-web starter, die gut funktioniert. Ich bin in der Lage, Zugriff über urls.
Aber ich habe Anforderung zu erstellen Konsole mit dem Befehl, die berechnen, und speichern Sie einige Werte im backend. Ich möchte in der Lage zum ausführen Konsole den Befehl manuell oder durch die bash-script.
Konnte ich nicht finden, keine Dokumentation, wie zu integrieren Frühjahr-shell-Projekt in spring-boot-web-Anwendung.
Es gibt auch keine option zu wählen, spring-shell-Abhängigkeit in spring-boot-starter - https://start.spring.io/
1) webapp und Konsole müssen Sie zwei separate Anwendungen, und ich brauche, um deren Bereitstellung getrennt ?
2) Ist es möglich, deploy-web-app und führen Sie console-Befehle in der gleichen app ?
3) Was ist der beste Ansatz, um gemeinsamen code (model, Dienstleistungen, Unternehmen, business-Logik), zwischen shell-und web-Anwendungen ?
Kann bitte jemand helfen dazu ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier 2 Optionen:
Könnten Sie eine Feder
@RestController
, die Sie dann Aufruf von der Kommandozeile aus ?Können Sie leicht einbetten dieser in ein nettes shell-script.
Obwohl es hauptsächlich für die überwachung/administration, können Sie die spring-boot-remote-shell für, die.
Abhängigkeiten
Müssen Sie die folgenden Abhängigkeiten zu ermöglichen, die remote-shell:
Groovy-Skript:
Fügen Sie das folgende Skript in
src/main/resources/custom.groovy
:Bekommen eine Spring-bean von dieser groovy-Skript (Quelle: https://stackoverflow.com/a/24300534/641627):
Starten Sie Ihre SpringBootApp
Mit spring-boot-remote-shell auf dem Klassenpfad, der Spring-Boot-Anwendung lauscht auf port 5000 (Standard).
Jetzt können Sie dies tun:
Helfen
Geben Sie
help
um die Liste der verfügbaren Befehle:Rufen Sie unsere benutzerdefinierten Befehl
Unserer benutzerdefinierten Befehl aufgelistet ist (der vierte von oben), können Sie es nennen:
So, im wesentlichen, Ihre crontab machen würde
telnet 5000
und ausführencustom
Argumente
Um Argumente verwenden, können Sie einen Blick auf die Dokumentation:
Sub-Befehl (oder Optionen)
Immer noch von Ihren Dokumentation:
Den letzten Befehl ausgeführt wird:
jdbc
connect
jdbc:derby:memory:EmbeddedDB;create=true
Ein Vollständiges Beispiel
Folgendes enthält:
Code:
Es klingt wie Sie haben zwei unterschiedliche Anwendungsfälle, hier: Ausführung der geplanten tasks und die Ausführung von Befehlen manuell. Von meinem Verständnis, Frühling Shell ist nicht Teil der Boot-ökosystem. Schreiben Sie eine Feder-Shell-Anwendung, die externe Boot-Web-app, aber es geht nicht, einbetten innerhalb es. Zumindest aus meiner Erfahrung.
Für den ersten Fall der geplanten Aufgaben sollten Sie sich im Spring Scheduler. Sie sollten in der Lage sein, um die Konfiguration einer Spring-Anwendung (Boot oder normal), die einen Task Scheduler in es. Sie können dann konfigurieren Sie Ihre Aufgaben, die geplant werden können, so dass der scheduler die Arbeit machen.
Zur manuellen Ausführung der Befehle, die Sie haben ein paar Optionen hier. Wenn Sie nutzen Spring, Shell, angenommen es läuft in einem eigenen Prozess, die sich außerhalb der Feder-Boot-Prozess. Man braucht, um die Shell-app-Aufruf in die Boot-Anwendung (vorausgesetzt, das ist, wo Sie arbeiten wollen, auftreten) mithilfe von remote Methode invocation-Technologien (z.B. RMI, REST, etc).
Alternative zum Frühjahr Shell einbetten, eine remote-shell in Ihr Boot-Anwendung. Im wesentlichen, Sie können SSH verwenden, um eine Verbindung zu Ihrem Boot application und definieren Sie Befehle in einer ähnlichen Weise wie der Frühling-Shell. Der Vorteil ist, dass dies im gleichen Prozess wie die Boot-Anwendung. So können Sie injizieren Task Scheduler und führen die gleichen Aufgaben, die manuell geplant werden. Dies könnte eine gute option, wenn Sie möchten, um manuell kicken die gleichen Aufgaben, sind geplant. Doco für die remote-Konsole ist hier.
Hoffe, das hilft