Starten von Spring Boot als Vordergrundprozess innerhalb eines Bash-Skripts

9

Ich verpacke meinen Spring Boot War mit eingebettetem Tomcat Servlet Container. Und stellen Sie es als reguläre Java-Anwendung mit java -jar server.war <Spring Args> bereit. Ich schrieb ein Bash-Skript, das die Bereitstellung des Servers als Hintergrund / Vordergrund-Prozess übernehmen würde:

%Vor%

Wie Sie sehen, verwende ich für den Start des Hintergrundprozesses nohup . Alles funktioniert gut, es sendet STDOUT und STDERR an meine ${LOG_PATH}/console.log . console.log meldet, dass mein Server auf dem vorkonfigurierten Port läuft (unter Verwendung von Spring-Profilen). Ich habe ein Profil dev-https , das mit dem Port 8443 :

konfiguriert wurde %Vor%

Wenn ich jedoch versuche, den Server als Vordergrundprozess zu starten, erhalte ich unerwartetes Verhalten. Immer wenn ich den Server mit start_foreground() veröffentliche, startet er gut, aber der Port wird auf den Standard 8080 zurückgesetzt.

Wenn ich einen Debugger anschließe und versuche, Werte mit environment.getProperty("server.port") zu erhalten, wird eine leere Zeichenfolge zurückgegeben (wenn jedoch eine Eigenschaft nicht definiert ist, gibt sie normalerweise null zurück). Darüber hinaus geben alle anderen Eigenschaften erwartete Werte zurück:

environment.getProperty("spring.profiles.active")=dev-https

environment.getProperty("server.ssl.enabled")=true

usw.

Ich habe versucht, eval durch exec zu ersetzen und sogar ${cmd} in start_foreground() bash-Funktion zu verwenden, aber der Port wird immer auf 8080 zurückgesetzt, und server.port gibt eine leere Zeichenfolge zurück.

Der seltsamste Teil ist, dass wenn ich ${cmd} in meiner Konsole (nicht innerhalb des Skripts) ausführe, alles einwandfrei funktioniert (rechtes Profil und der richtige Port wird benutzt).

Hat jemand auf so ein seltsames Problem gestoßen?

    
yeralin 18.01.2018, 15:39
quelle

2 Antworten

1

Ich habe versucht, dieses Problem mit einer neuen Instanz von Spring Boot zu reproduzieren. Schrieb ein schnelles Bash-Skript, und alles ging gut!

Dann fing ich an, mit meinem ursprünglichen Skript herumzuspielen und fand heraus, dass ich SERVER_PORT variable benutzte (weil ich ein optionales Argument --port <num> für den Benutzer hatte).

Offensichtlich wird diese Umgebungsvariable auch von Spring Framework verwendet: Ссылка

Mein Fehler war SERVER_PORT var zu exportieren (ich brauchte es jedoch aus anderen Gründen).

Lösung wäre, export von export SERVER_PORT="" zu entfernen oder die Variable in etwas anderes umzubenennen (was ich am Ende getan habe).

    
yeralin 22.01.2018, 15:46
quelle
2

Es sieht so aus, als ob Sie die Konfiguration verwenden (wie Port-Nummer usw. nur für Hintergrund und nicht für Vordergrund). Sie haben die Variable nicht deklariert (Sie haben diese Zeile verpasst)

%Vor%

für Vordergrund.

    
Kiran Kumar 22.01.2018 07:47
quelle

Tags und Links