【发布时间】:2019-03-05 09:23:03
【问题描述】:
我正在尝试使用 Gradle 生成的 jar 中的嵌入式 Tomcat 服务器运行 Spring Boot 应用程序。
我想说没什么太花哨的,但不知怎的,我无法让它按照我想要的方式工作。
这里有一些问题。目标是在测试服务器上运行 Spring Boot 应用程序,以便我们可以对其进行一些集成测试。我们已经创建了一些 Postman 测试,我们将在 Spring Boot 应用程序启动后在 Jenkins 上运行这些测试。
简单明了地运行 jar 工件
我的猜测是,最简单的方法是将 jar 部署到服务器并使用 java -jar my-app.1.0.0-SNAPSHOT.jar 运行它。当我在 localhost 上运行此命令并转到 http://localhost:8100 时,我可以看到该网站。但是当我在服务器上做同样的事情时,网站没有显示。
使用脚本运行 jar
为了自动启动和停止 Spring Boot 应用程序,我认为脚本会很好。
我创建了一个脚本,它应该关闭所有正在运行的进程,然后启动一个新进程。此脚本将在新工件部署到测试服务器后调用。
#!/bin/sh
ps | grep my-app | awk '{print $1}' | xargs kill -9 || true
/usr/bin/java -jar my-app.1.0.0-SNAPSHOT.jar &
运行此脚本时会发生以下情况:
首先会显示一条消息,指示未正确使用ps 命令:
$ ./start-app
Usage:
kill [options] <pid> [...]
...
然后我希望 Spring Boot 应用程序启动,但首先我看到另一个提示,然后 Spring Boot 应用程序启动。
$
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.5.RELEASE)
...
2018-09-29 18:11:45.142 ERROR 29971 --- [ main] o.apache.catalina.core.StandardService : Failed to start connector [Connector[HTTP/1.1-8100]]
...
表示另一个实例正在运行,可以通过调用ps 进行验证。而且在我按下 enter 键之前,我也不会收到另一个提示。
问题是:如何让 Spring Boot 应用程序自行运行并在可用时启动新实例?
【问题讨论】:
标签: spring-boot jenkins