Cloud Foundry:如何使用额外的 JVM 命令部署 spring 启动应用程序
Cloud Foundry : How to deploy spring boot app with an additional JVM command
我正在使用 Pivotal 在 Cloud Foundry 中托管 Spring 启动应用程序。我可以在没有任何命令的情况下部署应用程序。但我的要求是 运行 使用额外的 JVM 命令作为此 issue
的解决方法
-Doracle.jdbc.timezoneAsRegion=false
运行 下面的清单我收到错误,
---
applications:
- name: gl-bo-sample
command: java -jar -Doracle.jdbc.timezoneAsRegion=false
path: ./target/backoffice-1.0-SNAPSHOT.jar
buildpacks:
- https://github.com/cloudfoundry/java-buildpack.git
CF 日志
2019-11-29T16:33:45.606+05:30 [CELL/0] [OUT] Cell f38e366a-22ac-45ee-9dba-73e1f505525a creating container for instance e1475d2b-0c8e-4766-7e13-6da7
2019-11-29T16:33:45.952+05:30 [CELL/0] [OUT] Cell f38e366a-22ac-45ee-9dba-73e1f505525a successfully created container for instance e1475d2b-0c8e-4766-7e13-6da7
2019-11-29T16:33:46.958+05:30 [CELL/0] [OUT] Starting health monitoring of container
2019-11-29T16:33:47.168+05:30 [APP/PROC/WEB/0] [ERR] bash: java: command not found
2019-11-29T16:33:47.179+05:30 [APP/PROC/WEB/0] [OUT] Exit status 127
2019-11-29T16:33:47.182+05:30 [CELL/SSHD/0] [OUT] Exit status 0
2019-11-29T16:33:47.385+05:30 [CELL/0] [OUT] Cell f38e366a-22ac-45ee-9dba-73e1f505525a stopping instance e1475d2b-0c8e-4766-7e13-6da7
2019-11-29T16:33:47.385+05:30 [CELL/0] [OUT] Cell f38e366a-22ac-45ee-9dba-73e1f505525a destroying container for instance e1475d2b-0c8e-4766-7e13-6da7
2019-11-29T16:33:47.402+05:30 [API/2] [OUT] Process has crashed with type: "web"
有人能告诉我如何实现这个或任何其他方法来实现这个。谢谢。
您可以在 application.properties 中声明它,它应该可以正常工作。
好的,有几件事要告诉你。
command: java -jar -Doracle.jdbc.timezoneAsRegion=false
使用 Java buildpack 时,除非您真的、真的知道自己在做什么,否则不要设置命令。它可能会导致问题,因为您完全覆盖了 Java 构建包设置的命令。
如果您设置了命令,您需要确保撤消它。您可以通过将其从 manifest.yml 和 运行 cf push -c null
中删除来实现。 -c null
将告诉服务器端删除保存命令并返回使用 Java buildpack 决定的内容。另一种选择是 cf delete
您的应用,但这并不总是可行的。
要设置 JVM 参数,您可以简单地 cf set-env <app> JAVA_OPTS '-Doracle.jdbc.timezoneAsRegion=false
,或者在您的 manifest.yml
中设置它们。您可以添加一个包含环境变量的 env:
块。
例如:
...
env:
JAVA_OPTS: -Doracle.jdbc.timezoneAsRegion=false
...
这是有效的,因为 Java buildpack 在启动命令中包含 $JAVA_OPTS
,因此您放入其中的任何内容都会被替换到启动您的应用程序的命令中。
如果您有可执行 JAR,您还可以使用 cf set-env <app> JBP_CONFIG_JAVA_MAIN '{ arguments: "--server.port=9090 --foo=bar" }'
来设置应用程序参数。此选项用于设置 argv
由应用程序本身而非 JVM 处理的参数。与 JAVA_OPTS 相同,您可以在 manifest.yml
.
的 env:
块中设置它
就其价值而言,您得到 bash: java: command not found
的原因是因为 Java buildpack 没有将 java
放在 PATH 上。您需要设置位于 $HOME/.java-buildpack/open_jdk_jre/bin/java
的 java
进程的完整路径。因此,如果您使用完整路径,则可以使您正在做的事情超出工作范围。也就是说,强烈建议您不要设置 command
.
旁注。不要将 buildpack
指向 https://github.com/cloudfoundry/java-buildpack.git
。当您执行此操作时,您指向的是 master 分支,这是一个移动的目标。您通常应该使用您的平台提供的 buildpack,即 cf buildpacks
,或向 URL 添加发布标签,如 https://github.com/cloudfoundry/java-buildpack.git#v4.26
以获得 Java buildpack 的 v4.26。
希望对您有所帮助!
我正在使用 Pivotal 在 Cloud Foundry 中托管 Spring 启动应用程序。我可以在没有任何命令的情况下部署应用程序。但我的要求是 运行 使用额外的 JVM 命令作为此 issue
的解决方法-Doracle.jdbc.timezoneAsRegion=false
运行 下面的清单我收到错误,
---
applications:
- name: gl-bo-sample
command: java -jar -Doracle.jdbc.timezoneAsRegion=false
path: ./target/backoffice-1.0-SNAPSHOT.jar
buildpacks:
- https://github.com/cloudfoundry/java-buildpack.git
CF 日志
2019-11-29T16:33:45.606+05:30 [CELL/0] [OUT] Cell f38e366a-22ac-45ee-9dba-73e1f505525a creating container for instance e1475d2b-0c8e-4766-7e13-6da7
2019-11-29T16:33:45.952+05:30 [CELL/0] [OUT] Cell f38e366a-22ac-45ee-9dba-73e1f505525a successfully created container for instance e1475d2b-0c8e-4766-7e13-6da7
2019-11-29T16:33:46.958+05:30 [CELL/0] [OUT] Starting health monitoring of container
2019-11-29T16:33:47.168+05:30 [APP/PROC/WEB/0] [ERR] bash: java: command not found
2019-11-29T16:33:47.179+05:30 [APP/PROC/WEB/0] [OUT] Exit status 127
2019-11-29T16:33:47.182+05:30 [CELL/SSHD/0] [OUT] Exit status 0
2019-11-29T16:33:47.385+05:30 [CELL/0] [OUT] Cell f38e366a-22ac-45ee-9dba-73e1f505525a stopping instance e1475d2b-0c8e-4766-7e13-6da7
2019-11-29T16:33:47.385+05:30 [CELL/0] [OUT] Cell f38e366a-22ac-45ee-9dba-73e1f505525a destroying container for instance e1475d2b-0c8e-4766-7e13-6da7
2019-11-29T16:33:47.402+05:30 [API/2] [OUT] Process has crashed with type: "web"
有人能告诉我如何实现这个或任何其他方法来实现这个。谢谢。
您可以在 application.properties 中声明它,它应该可以正常工作。
好的,有几件事要告诉你。
command: java -jar -Doracle.jdbc.timezoneAsRegion=false
使用 Java buildpack 时,除非您真的、真的知道自己在做什么,否则不要设置命令。它可能会导致问题,因为您完全覆盖了 Java 构建包设置的命令。
如果您设置了命令,您需要确保撤消它。您可以通过将其从 manifest.yml 和 运行
cf push -c null
中删除来实现。-c null
将告诉服务器端删除保存命令并返回使用 Java buildpack 决定的内容。另一种选择是cf delete
您的应用,但这并不总是可行的。要设置 JVM 参数,您可以简单地
cf set-env <app> JAVA_OPTS '-Doracle.jdbc.timezoneAsRegion=false
,或者在您的manifest.yml
中设置它们。您可以添加一个包含环境变量的env:
块。例如:
... env: JAVA_OPTS: -Doracle.jdbc.timezoneAsRegion=false ...
这是有效的,因为 Java buildpack 在启动命令中包含
$JAVA_OPTS
,因此您放入其中的任何内容都会被替换到启动您的应用程序的命令中。如果您有可执行 JAR,您还可以使用
cf set-env <app> JBP_CONFIG_JAVA_MAIN '{ arguments: "--server.port=9090 --foo=bar" }'
来设置应用程序参数。此选项用于设置argv
由应用程序本身而非 JVM 处理的参数。与 JAVA_OPTS 相同,您可以在manifest.yml
. 的 就其价值而言,您得到
bash: java: command not found
的原因是因为 Java buildpack 没有将java
放在 PATH 上。您需要设置位于$HOME/.java-buildpack/open_jdk_jre/bin/java
的java
进程的完整路径。因此,如果您使用完整路径,则可以使您正在做的事情超出工作范围。也就是说,强烈建议您不要设置command
.旁注。不要将
buildpack
指向https://github.com/cloudfoundry/java-buildpack.git
。当您执行此操作时,您指向的是 master 分支,这是一个移动的目标。您通常应该使用您的平台提供的 buildpack,即cf buildpacks
,或向 URL 添加发布标签,如https://github.com/cloudfoundry/java-buildpack.git#v4.26
以获得 Java buildpack 的 v4.26。
env:
块中设置它
希望对您有所帮助!