这是在IBM Bluemix中运行的。
我正在运行Java Ninja Framework应用程序,作为一个独立的jar(使用嵌入式Jetty)。如果我在本地运行它:
$ java -jar -Dninja.port=4444 new-app-1.0.0.jar
应用程序启动,并侦听端口4444:o.e.jetty.server.ServerConnector - Started ServerConnector@c9d0d6{HTTP/1.1}{0.0.0.0:4444}
但是,推送到CF时这不起作用。
我在清单中试过了:
---
applications:
- path: "./target/new-app-1.0.0.jar"
memory: "500m"
name: "foo-new-app"
env:
JAVA_OPTS: "-Dninja.port=$PORT"
buildpack: java_buildpack
应用程序始终侦听8080(默认值):
OUT 03:25:29.979 [main] INFO o.e.jetty.server.ServerConnector - Started ServerConnector@65ae6ba4{HTTP/1.1}{0.0.0.0:8080}
因此,该应用程序无法通过健康检查,因为它正在侦听错误的端口。
根据@sabha的建议,我跑了
CF_TRACE=true cf app foo-new-app
这是检测到的启动命令:
"detected_start_command":"CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-2.0.2_RELEASE -memorySizes=metaspace:64m.. -memoryWeights=heap:75,metaspace:10,native:10,stack:5 -memoryInitials=heap:100%,metaspace:100% -totMemory=$MEMORY_LIMIT) && JAVA_OPTS=\"-Djava.io.tmpdir=$TMPDIR -XX:OnOutOfMemoryError=$PWD/.java-buildpack/open_jdk_jre/bin/killjava.sh $CALCULATED_MEMORY -Dninja.port=\" && eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. ninja.standalone.NinjaJetty"
看起来-Dninja.port
arg未正确设置:
-Dninja.port=\"
如果我查看bluemix控制台(环境变量),这就是我对JAVA_OPTS
变量的看法:
-Dninja.port=$PORT
Bluemix是否正确处理此问题?根据CF文档,我应该可以在那里使用$ PORT。
以下是java_buildpack文档使用$ PORT作为参数描述的地方:https://github.com/cloudfoundry/java-buildpack/blob/master/docs/framework-java_opts.md#escaping-strings
再次关注@sabha,我最终使用了:JAVA_OPTS="-Dninja.port=\\$PORT"
答案 0 :(得分:1)
在CF Diego中,分配的默认端口为8080
,因此您将获得默认行为。您可以通过以下方式验证:
1)cf ssh
到app和ps -ef
查看java命令行args或
2)重新启动应用程序并检查buildpack输出以获取释放步骤或
3)只需尝试CF_TRACE=true cf app foo-new-app
并检查detected_start_command值。
答案 1 :(得分:1)
出现$ PORT在实际执行之前由buildpack解释。像'\ $ PORT'一样转义$ PORT,java buildpack就像文字一样使用它,arg在最终运行时被解释。
设置方式:** cf set-env foo-new-app JAVA_OPTS'-Deninja.port = \ $ PORT'**&& cf restage foo-new-app。
然后使用上述方法进行检查。 vcap @ i7lpc06hav3:〜$ ps -ef | grep java vcap 14 1 69 14:30? 00:00:33 /home/vcap/app/.java-buildpack/oracle_jre/bin/java -.......... -Dninja.port = 8080 -Daccess.logging .enabled = false -Dhttp.port = 8080 -classpath /home/vcap/app/.java- ... org.apache.catalina.startup.Bootstrap start