Preferowaną metodą wdrażania Spring boot jest wykonywalny plik jar, który zawiera plik tomcat.
Zaczyna się od prostego java -jar myapp.jar
.
Teraz chcę wdrożyć ten jar na moim serwerze linux na EC2, czy coś mi brakuje, czy naprawdę muszę utworzyć skrypt inicjujący, aby poprawnie uruchomić aplikację jako demon?
Jeśli po prostu zadzwonię, java -jar
aplikacja ginie po wylogowaniu.
Mógłbym uruchomić go w screen lub nohup, ale nie jest to zbyt eleganckie, a ponowne uruchomienie serwera zmusiłoby mnie do zalogowania się i ręcznego uruchomienia procesu.
Więc czy jest już coś do zadania w wiosennym rozruchu?
java
linux
spring
spring-boot
Cleber Goncalves
źródło
źródło
Odpowiedzi:
Zwróć uwagę, że od wersji Spring Boot 1.3.0.M1 możesz budować w pełni wykonywalne pliki jar za pomocą Mavena i Gradle.
W przypadku Mavena po prostu uwzględnij w swoim
pom.xml
:W przypadku Gradle dodaj następujący fragment do swojego
build.gradle
:W pełni wykonywalny plik jar zawiera dodatkowy skrypt na początku pliku, który umożliwia po prostu dowiązanie symboliczne do słoika Spring Boot
init.d
lub użyciesystemd
skryptu.init.d
przykład:Pozwala to na uruchamianie, zatrzymywanie i ponowne uruchamianie aplikacji, na przykład:
Lub użyj
systemd
skryptu:Więcej informacji pod następującymi linkami:
init.d
usługasystemd
usługaźródło
$ chmod +x /etc/init.d/yourapp
aby móc uruchomić / zatrzymać / ponownie uruchomićZdecydowanie najłatwiejszym i najbardziej niezawodnym sposobem uruchamiania aplikacji Spring Boot w środowisku produkcyjnym jest Docker. Użyj Docker Compose, Docker Swarm lub Kubernetes, jeśli chcesz korzystać z wielu połączonych usług.
Oto prosty poradnik
Dockerfile
z oficjalnego przewodnika po platformie Spring Boot Docker :Oto przykładowa linia poleceń do uruchomienia kontenera jako demona:
źródło
Moja aplikacja rozruchowa Spring ma dwa inicjatory. Jeden do rozwoju, a drugi do produkcji. Do programowania używam głównej metody, takiej jak ta:
My Initializer dla środowiska produkcyjnego rozszerza SpringBootServletInitializer i wygląda następująco:
Używam gradle, a mój plik build.gradle stosuje wtyczkę „ WAR ”. Kiedy uruchamiam go w środowisku programistycznym, używam zadania rozruchowego . Tam, gdzie chcę wdrożyć go do produkcji, używam zadania assemble do wygenerowania WAR i wdrożenia.
Mogę działać jak normalna aplikacja sprężynowa w produkcji, nie pomijając korzyści, jakie zapewnia wbudowany kocur podczas programowania. Mam nadzieję że to pomoże.
źródło
W środowisku produkcyjnym chcesz, aby Twoja aplikacja była ponownie uruchamiana po ponownym uruchomieniu komputera itp., Utworzenie skryptu /etc/init.d/ i połączenie z odpowiednim poziomem pracy w celu uruchomienia i zatrzymania jest właściwym podejściem. Spring Boot nie obejmie tego, ponieważ jest to konfiguracja specyficzna dla systemu operacyjnego i jest mnóstwo innych opcji, czy chcesz, aby działał w więzieniu chroot, czy musi zatrzymać / uruchomić przed jakimś innym oprogramowaniem itp.
źródło
Możesz użyć aplikacji o nazwie Supervisor . W konfiguracji nadzorcy można zdefiniować wiele usług i sposoby ich wykonywania.
W przypadku aplikacji rozruchowych Java i Spring polecenie byłoby
java -jar springbootapp.jar
.Można zapewnić opcje, aby aplikacja zawsze działała, więc jeśli EC2 zrestartuje się, Supervisor ponownie uruchomi aplikację
Uważam, że Supervisor jest łatwy w użyciu w porównaniu do umieszczania skryptów startowych w /etc/init.d/. Skrypty startowe zawieszały się lub przechodziły w stan oczekiwania w przypadku błędów.
źródło
Jeśli używasz gradle, możesz po prostu dodać to do swojego build.gradle
Następnie możesz uruchomić aplikację, wpisując ./your-app.jar
W tym miejscu znajdziesz również kompletny przewodnik dotyczący konfiguracji aplikacji jako usługi
56.1.1 Instalacja jako usługa init.d (System V)
http://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
Twoje zdrowie
źródło
bootRepackage { executable = true }
Zobacz docs.spring.io/spring-boot/docs/current/reference/html/…W systemie operacyjnym Windows bez usługi.
start.bat
stop.bat:
run.bat
źródło
Uruchamiam aplikacje, które chcę uruchamiać na stałe lub przynajmniej częściowo na stałe, przez screen -dmS NAZWA / ścieżka / do / skryptu. O ile mi wiadomo, jest to najbardziej eleganckie rozwiązanie.
źródło
Jest to prosta, możesz użyć wtyczki Spring Boot Maven, aby zakończyć wdrażanie kodu.
konfiguracja wtyczki, taka jak:
, A
jvmArtuments
to add dla ciebie JVM.profiles
wybierze profil, aby uruchomić aplikację.executable
może sprawić, że Twoja aplikacja będzie działać bez przerwy.i jeśli dodajesz
mvnw
do swojego projektu, lub masz maven entuzjazm. Możesz po prostu zadzwonić./mvnw spring-boot:run
po mvnw lub mavenamvn spring-boot:run
.źródło