Servicio de sistema de producción de paquete jar ejecutable Spring Boot
En el complemento Maven de Spring Boot, también se proporciona la función de construir un programa ejecutable completo. ¿Qué significa?
En otras palabras, podemos java -jar
ejecutar el jar directamente para ejecutar el programa sin usarlo . Para que podamos crearlo fácilmente como un servicio del sistema que se ejecuta en segundo plano.
Los pasos principales son los siguientes:
1. Configure el archivo pom
Agregue el complemento Spring Boot en pom.xml y preste atención para establecer la configuración ejecutable
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
2. Generar jar ejecutable
Después de completar la configuración anterior, use mvn install
para empaquetar y construir un paquete jar ejecutable
3. Crear una conexión suave
Crear un enlace suave al /etc/init.d/
directorio
sudo ln -s /var/yourapp/yourapp.jar /etc/init.d/yourapp
4. Proyecto de inicio basado en servicios
Después de crear la conexión de software, podemos controlar las operaciones de inicio, detención y reinicio en la aplicación yourapp.jar con el siguiente comando
service yourapp start
service yourapp stop
service yourapp restart
service yourapp start
Explicación
Número mágico en formato zip
El jar / war generado es en realidad un archivo zip. ¿Por qué este archivo zip se puede ejecutar directamente debajo del shell?
Estudie el formato del próximo archivo zip.
El archivo zip está compuesto de entradas, y cada entrada tiene un byte de 4 al principio magic number
:
Local file header signature = 0x04034b50 (read as a little-endian number)
即 PK\003\004
Referencia: https://en.wikipedia.org/wiki/Zip_(file_format)
El software de procesamiento zip lee el número mágico antes de comenzar a procesar. Entonces, en Linux / Unix, puede escribir un archivo bash directamente al comienzo de un archivo zip, para que se considere un script bash. El software de procesamiento zip aún puede procesarlo correctamente al leer este archivo.
Por ejemplo, generado por el arranque de primavera executable jar/war
, el comienzo es:
#!/bin/bash
#
# . ____ _ __ _ _
# /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
# ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
# \\/ ___)| |_)| | | | | || (_| | ) ) ) )
# ' |____| .__|_| |_|_| |_\__, | / / / /
# =========|_|==============|___/=/_/_/_/
# :: Spring Boot Startup Script ::
#
Al final del contenido del script, puede ver el número mágico de la entrada zip:
exit 0
PK^C^D
spring boot 的 launch.script
De hecho spring boot maven plugin
, el siguiente script está empaquetado en la parte frontal del tarro gordo.
Esto launch.script
admite muchas configuraciones variables.
También puede identificar automáticamente si se encuentra en diferentes modos de auto o servicio.
El llamado se auto mode
refiere a la operación directa jar/war
:
./demo.jar
Y service mode
es el caso de que el sistema operativo inicie el servicio:
service demo start/stop/restart/status
Por lo tanto, fat jar se puede ejecutar directamente en la línea de comandos ordinaria, ./xxx.jar
o vincular a la /etc/init.d/
siguiente, y convertirse en un servicio.
Resumen
jar/war
En realidad está en formato zip.spring-boot-maven-plugin
Trae el script de inicio alexecutable jar/war
frente.- La última línea del
exit 0
script es que el script solo ejecuta su propio contenido, no el contenido en el jar / war. - El archivo zip está compuesto por múltiples entradas, y hay una entrada al principio
magic number
, por lo que el software de procesamiento zip puede omitir el script anterior y encontrarlo con precisiónzip entry