我正在尝试从Gradle生成的jar中使用嵌入式Tomcat服务器运行Spring Boot应用程序。
我想说的没什么,但是以某种方式我无法使它按我想要的方式工作。
这里有一些问题。目的是在测试服务器上运行Spring Boot应用程序,以便我们可以对其进行一些集成测试。我们创建了一些Postman测试,将在Spring Boot应用程序启动后在Jenkins上运行。
我的猜测是,最简单的方法是将jar部署到服务器并使用java -jar my-app.1.0.0-SNAPSHOT.jar
运行它。当我在本地主机上运行此命令并转到 http://localhost:8100 时,我可以看到该网站。但是,当我在服务器上执行相同的操作时,网站不会显示。
要自动启动和停止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应用程序自行运行并在可用时启动新实例?
答案 0 :(得分:1)
您的问题似乎是该应用程序没有被杀死。
如果该服务器仅用于测试您的应用程序,则可以通过运行以下命令更轻松地杀死所有Java进程:
pkill -f "java"
请注意,执行上述操作将杀死所有Java进程。如果您只运行一个Java应用程序,这不是问题。
这是一个可能满足您需求的脚本:
output=`lsof -i :8100`
if [ ${#output} != 0 ]; then
echo "Port 8100 is already running, killing all java processes"
pkill -f "java"
else
echo "Port 8100 is NOT running"
fi
echo "Starting application"
java -jar yourjarfilenamehere.jar &
这是什么:
8100
是否正在使用(您的应用程序使用的端口)