【问题标题】:Spring Boot and Cloud deploymentSpring Boot 和云部署
【发布时间】:2017-08-11 12:36:43
【问题描述】:
我目前正在使用 Spring Boot 开发 REST API。我希望它部署在谷歌云(计算引擎)上。
我创建了一个虚拟 linux 机器,安装了 java 8 并将我的 spring boot 应用程序放入其中。
它工作正常,但是:
我的应用程序是一个 jar 文件(嵌入式 Tomcat)。我用这个启动它:
java -jar myApp.jar
它工作正常。
但是当我关闭谷歌云上的外壳时,我的应用程序不再可用。
我希望我的应用程序始终可用,而不必每次退出 shell 时都启动它。有可能吗?
image of cloud shell
【问题讨论】:
标签:
google-app-engine
tomcat
spring-boot
cloud
embedded-jetty
【解决方案1】:
我认为这与Unix Thread 的问题相同。
快速回答是您的进程已链接到终端。当您关闭它时,该进程将被终止。如果我引用this answer:
另一方面,nohup 的作用是有效地将
从终端处理:
- 它关闭标准输入(程序将无法读取任何输入,即使它在前台运行。它不会停止,但会
收到错误代码或 EOF)。
- 它将标准输出和标准错误重定向到文件 nohup.out,因此程序不会因为写入标准输出而失败,如果
终端失败了,所以无论进程写入什么都不会丢失。
- 它阻止进程接收 SIGHUP(因此得名)。
所以,试试
nohup java -jar myApp.jar &
【解决方案2】:
如果您使用虚拟机(谷歌计算引擎),您可以使用脚本(Windows 中的 bat 或 linux 中的 sh)来执行 java -jar 命令,但您也可以使用容器引擎并创建一个 docker 容器你的应用程序。配置 dockerfile 并部署。容器环境自动运行你的应用