如何在生产环境中运行spring boot可执行jar?

Cle*_*ves 93 java linux spring spring-boot

Spring boot的首选部署方法是通过一个包含tomcat的可执行jar文件.

它以简单的方式开始java -jar myapp.jar.

现在,我想将该jar部署到我在EC2上的linux服务器上,我是否遗漏了某些东西或者我是否真的需要创建一个init脚本来正确启动应用程序作为守护进程?

如果我java -jar在注销时简单地调用应用程序就死了.

我可以在屏幕或nohup中启动它,但这不是很优雅,我的服务器重启将迫使我登录并手动启动该过程.

那么,春季靴子的任务是否已经存在?

小智 86

请注意,自Spring Boot 1.3.0.M1以来,您可以使用Maven和Gradle构建完全可执行的jar.

对于Maven,只需在您的内容中包含以下内容pom.xml:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

对于Gradle,请将以下代码段添加到您的build.gradle:

springBoot {
    executable = true
}
Run Code Online (Sandbox Code Playgroud)

完全可执行的jar在文件前面包含一个额外的脚本,允许您将Spring Boot jar符号链接到init.d或使用systemd脚本.

init.d 例:

$ln -s /var/yourapp/yourapp.jar /etc/init.d/yourapp
Run Code Online (Sandbox Code Playgroud)

这允许您启动,停止和重新启动应用程序,如:

$/etc/init.d/yourapp start|stop|restart
Run Code Online (Sandbox Code Playgroud)

或者使用systemd脚本:

[Unit]
Description=yourapp
After=syslog.target

[Service]
ExecStart=/var/yourapp/yourapp.jar
User=yourapp
WorkingDirectory=/var/yourapp
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

更多信息,请访问以下链接:

  • 您可能还需要执行`$ chmod + x/etc/init.d/yourapp`才能启动/停止/重启 (3认同)

mrt*_*rts 8

到目前为止,在生产中运行Spring Boot应用程序最简单可靠的方法是使用Docker.如果需要使用多个连接服务,请使用Docker Compose,Docker Swarm或Kubernetes.

这是一个简单Dockerfile的官方Spring Boot Docker指南,可以帮助您入门:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD YOUR-APP-NAME.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
Run Code Online (Sandbox Code Playgroud)

这是一个示例命令行,用于将容器作为守护程序运行:

docker run \
  -d --restart=always \
  -e "SPRING_PROFILES_ACTIVE=prod" \
  -p 8080:8080 \
  prefix/imagename
Run Code Online (Sandbox Code Playgroud)


Scr*_*yos 1

我通过 screen -dmS NAME /path/to/script 启动想要持久或至少半永久运行的应用程序。据我所知,这是最优雅的解决方案。