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

2022-08-31 09:11:04

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

它始于一个简单的.java -jar myapp.jar

现在,我想将该jar部署到EC2上的linux服务器上,我是否缺少某些内容,或者我真的需要创建一个初始化脚本来正确启动应用程序作为守护程序?

如果我只是在注销时简单地调用应用程序死亡。java -jar

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

那么,在春季靴子中已经有一些东西可以完成任务了吗?


答案 1

请注意,从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>

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

springBoot {
    executable = true
}

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

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

有关详细信息,请访问以下链接:


答案 2

到目前为止,在生产环境中运行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 不需要 ,你只需使用 Maven(此处为官方快速入门)或 Gradle(此处为官方快速入门)调用即可。Dockerfile

下面是将容器作为守护程序运行的示例命令行:

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

推荐