2016-07-22 43 views
0

這在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 [email protected]{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 [email protected]{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"

回答

1

在實際執行之前,出現$ PORT被buildpack解釋。像這樣'\ $ PORT'轉義$ PORT,java buildpack只是像使用文字一樣使用它,並且arg在最終運行時被解釋。

這樣設置的:** CF設置ENV富 - 新的應用程序JAVA_OPTS '-Dninja.port = \ $ PORT' ** & & CF重演富,新的應用程序。

然後使用上述方法檢查。 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

1

在CF迭戈,默認端口分配是8080,所以你會得到默認行爲。您可以通過驗證這一點: 1)cf ssh到APP和ps -ef看到java命令行參數或 2)重新啓動應用程序,並檢查buildpack輸出發佈階段,或 3)只是嘗試CF_TRACE=true cf app foo-new-app並檢查detected_start_command值。

+0

嘗試了您的建議並更新了問題。介意看看? – mtyson

+0

在實際執行之前,出現$ PORT被buildpack解釋。像這樣逃脫$ PORT,java buildpack只是像使用文字一樣使用它,並且在最終的運行時會解析arg: – sabha

相關問題