El método de implementación preferido de Spring Boot es a través de un archivo jar ejecutable que contiene tomcat en su interior.
Se inicia con un simple java -jar myapp.jar
.
Ahora, quiero implementar ese jar en mi servidor Linux en EC2, ¿me falta algo o realmente necesito crear un script de inicio para iniciar correctamente la aplicación como un demonio?
Si simplemente llamo, java -jar
la aplicación muere cuando me desconecto.
Podría iniciarlo en pantalla o nohup, pero eso no es muy elegante y un reinicio en mi servidor me obligaría a iniciar sesión e iniciar el proceso manualmente.
Entonces, ¿hay algo ya para la tarea en Spring Boot?
java
linux
spring
spring-boot
Cleber Goncalves
fuente
fuente
Respuestas:
Tenga en cuenta que desde Spring Boot 1.3.0.M1, puede crear archivos jar completamente ejecutables con Maven y Gradle.
Para Maven, solo incluya lo siguiente en su
pom.xml
:Para Gradle, agregue el siguiente fragmento a su
build.gradle
:El jar completamente ejecutable contiene un script adicional al principio del archivo, que le permite simplemente enlazar simbólicamente su jar Spring Boot
init.d
o usar unsystemd
script.init.d
ejemplo:Esto le permite iniciar, detener y reiniciar su aplicación como:
O usa un
systemd
script:Más información en los siguientes enlaces:
init.d
serviciosystemd
serviciofuente
$ chmod +x /etc/init.d/yourapp
para poder iniciar / detener / reiniciarCon mucho, la forma más fácil y confiable de ejecutar aplicaciones Spring Boot en producción es con Docker. Utilice Docker Compose, Docker Swarm o Kubernetes si necesita utilizar varios servicios conectados.
Aquí hay un simple
Dockerfile
de la guía oficial de Spring Boot Docker para comenzar:Aquí hay una línea de comando de muestra para ejecutar el contenedor como un demonio:
fuente
Mi aplicación de arranque Spring tiene dos inicializadores. Uno para desarrollo y otro para producción. Para el desarrollo, uso el método principal como este:
Mi inicializador para el entorno de producción extiende SpringBootServletInitializer y se ve así:
Yo uso gradle y mi archivo build.gradle aplica el complemento ' WAR '. Cuando lo ejecuto en el entorno de desarrollo, uso la tarea bootrun . Donde, como cuando quiero implementarlo en producción, uso la tarea de ensamblar para generar el WAR e implementarlo.
Puedo ejecutar como una aplicación de resorte normal en producción sin descontar las ventajas que brinda el Tomcat incorporado durante el desarrollo. Espero que esto ayude.
fuente
En un entorno de producción, desea que su aplicación se inicie nuevamente en un reinicio de la máquina, etc., crear un script /etc/init.d/ y vincularlo al nivel de ejecución apropiado para iniciarlo y detenerlo es el enfoque correcto. Spring Boot no se extenderá para cubrir esto, ya que es una configuración específica del sistema operativo y hay toneladas de otras opciones, ¿desea que se ejecute en una cárcel chroot? ¿Debe detenerse / comenzar antes que algún otro software, etc.?
fuente
Puede utilizar la aplicación llamada Supervisor . En la configuración del supervisor, puede definir varios servicios y formas de ejecutar los mismos.
Para las aplicaciones de arranque de Java y Spring, el comando sería
java -jar springbootapp.jar
.Se pueden proporcionar opciones para mantener la aplicación en ejecución siempre, por lo que si el EC2 se reinicia, Supervisor reiniciará su aplicación
Supervisor me pareció fácil de usar en comparación con poner scripts de inicio en /etc/init.d/. Los scripts de inicio se bloqueaban o entraban en estado de espera en caso de errores.
fuente
Si está utilizando gradle, puede agregar esto a su build.gradle
Luego puede ejecutar su aplicación escribiendo ./your-app.jar
Además, puede encontrar una guía completa aquí para configurar su aplicación como servicio
56.1.1 Instalación como servicio init.d (System V)
http://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
salud
fuente
bootRepackage { executable = true }
Ver docs.spring.io/spring-boot/docs/current/reference/html/…En el sistema operativo Windows sin servicio.
start.bat
stop.bat:
run.bat
fuente
Inicio aplicaciones que quiero ejecutar de forma persistente o al menos semipermanente a través de la pantalla -dmS NAME / path / to / script. Por lo que sé, esta es la solución más elegante.
fuente
Esto es simple, puede usar el complemento Spring Boot Maven para finalizar la implementación de su código.
la configuración del complemento como:
Y
jvmArtuments
se agrega para usted jvm.profiles
elegirá un perfil para iniciar su aplicación.executable
puede hacer que su aplicación se ejecute directamente.y si agregas
mvnw
a tu proyecto, o tienes una experiencia experta. Puede llamar./mvnw spring-boot:run
para mvnw omvn spring-boot:run
maven.fuente