Spring boot的首选部署方法是通过一个内部包含tomcat的可执行jar文件。
它是从一个简单的java -jar myapp.jar
开始的。
现在,我想把这个jar部署到EC2上的linux服务器上,我是不是遗漏了什么,或者我真的需要创建一个init脚本来正确地将应用程序作为守护进程启动?
如果我只是简单地调用java -jar
,那么当我注销时应用程序就会死掉。
我可以在screen或nohup中启动它,但这并不是很优雅,在我的服务器中重新启动将迫使我登录并手动启动该进程。
那么,spring boot中的任务已经有了什么东西了吗?
发布于 2017-05-26 23:35:11
到目前为止,在生产环境中运行Spring Boot应用程序最简单、最可靠的方法是使用Docker。如果您需要使用多个连接的服务,请使用Docker Compose、Docker Swarm或Kubernetes。
这是一个来自官方Spring Boot Docker guide的简单Dockerfile
,可以帮助您入门:
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" ]
构建Docker镜像的一个更好的方法是使用Jib,这是一个由谷歌维护的开源Java工具,用于构建Java应用程序的Docker镜像。Jib不需要Dockerfile
,只需使用Maven (官方快速入门here)或Gradle (官方快速入门here)调用它即可。
以下是将容器作为守护进程运行的示例命令行:
docker run \
-d --restart=always \
-e "SPRING_PROFILES_ACTIVE=prod" \
-p 8080:8080 \
prefix/imagename
发布于 2015-04-08 20:52:40
在生产环境中,您希望您的应用程序在机器重启等情况下再次启动,创建/ etc /init.d/脚本并链接到适当的运行级别来启动和停止它是正确的方法。Spring Boot不会扩展到这一点,因为它是一个操作系统特定的设置,还有大量的其他选项,你是否希望它在chroot监狱中运行,它是否需要在其他一些软件之前停止/启动等。
发布于 2016-03-25 19:34:05
您可以使用名为Supervisor的应用程序。在supervisor配置中,您可以定义多个服务以及执行这些服务的方式。
对于Java和Spring boot应用程序,命令应该是java -jar springbootapp.jar
。
如果EC2重新启动,管理程序将重新启动您的应用程序,则可以提供选项来保持应用程序运行always.So
与将启动脚本放在/etc/init.d/中相比,我发现Supervisor很容易使用。如果出现错误,启动脚本将挂起或进入等待状态。
https://stackoverflow.com/questions/22886083
复制相似问题