如何在生产环境中运行Spring Boot可执行jar?

14 浏览
0 Comments

如何在生产环境中运行Spring Boot可执行jar?

Spring Boot首选的部署方法是使用一个包含Tomcat的可执行jar文件。

使用简单的java -jar myapp.jar来启动它。

现在,我想将这个jar文件部署到我的EC2上的Linux服务器上,我是否漏了些什么,我真的需要创建一个init脚本来正确地将应用程序作为守护进程启动吗?

如果我只是调用java -jar,当我注销时应用程序会停止运行。

我可以在screen或nohup中启动它,但这不是非常优雅的解决方法,而且如果我服务器重启,我需要手动登录并启动进程。

那么,在Spring Boot中是否已经有为此任务准备好的东西?

admin 更改状态以发布 2023年5月22日
0
0 Comments

在生产环境中运行Spring Boot应用程序,最简单可靠的方法是使用Docker。如果您需要使用多个连接的服务,则使用Docker Compose、Docker Swarm或Kubernetes。

以下是官方Spring Boot Docker指南中的简单Dockerfile,以帮助您入门:

FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

更好的构建Docker镜像的方法是使用Jib,这是由Google开发和维护的开源Java工具,用于构建Java应用程序的Docker镜像。使用Jib时不需要Dockerfile,您只需要使用Maven(官方快速入门在此)或Gradle(官方快速入门在此)调用它。

以下是一个运行容器的示例命令行:

docker run \
  -d --restart=always \
  -e "SPRING_PROFILES_ACTIVE=prod" \
  -p 8080:8080 \
  prefix/imagename

0
0 Comments

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

对于Maven,在您的pom.xml文件中添加以下内容:


    org.springframework.boot
    spring-boot-maven-plugin
    
        true
    

对于Gradle,在您的build.gradle文件中添加以下片段:

springBoot {
    executable = true
}

完全可执行的jar包包含文件开头的额外脚本,让您可以将Spring Boot jar包直接链接到init.d或使用systemd脚本。

init.d示例:

$ln -s /var/yourapp/yourapp.jar /etc/init.d/yourapp

这样您就可以如下方式启动、停止和重新启动您的应用程序:

$/etc/init.d/yourapp start|stop|restart

或使用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

更多信息,请参考以下链接:

0