Cloud Foundry:如何使用附加的JVM命令部署Spring Boot应用程序

我正在使用Pivotal在Cloud Foundry中托管Spring Boot应用程序。我能够在没有任何命令的情况下部署应用程序。但是我的要求是,使用附加的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"

有人可以告诉我如何实现这一目标或任何其他实现此目标的方法。谢谢。

tian150288 回答:Cloud Foundry:如何使用附加的JVM命令部署Spring Boot应用程序

好,给您几件事。

  

命令:java -jar -Doracle.jdbc.timezoneAsRegion = false

  1. 在使用Java buildpack时,除非您真的非常了解自己在做什么,否则不要设置命令。当您完全覆盖Java buildpack设置的命令时,它可能会导致问题。

  2. 如果设置命令,则需要确保撤消该命令。您可以通过从manifest.yml中将其删除并运行cf push -c null来实现。 -c null会告诉服务器端删除save命令,然后返回使用Java buildpack的决定。另一个选择是cf delete您的应用程序,但这并不总是可能的。

  3. 要设置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,因此您放入其中的所有内容都将替换为启动应用程序的命令。

  4. 如果您具有可执行的JAR,还可以使用cf set-env <app> JBP_CONFIG_JAVA_MAIN '{ arguments: "--server.port=9090 --foo=bar" }'设置应用程序参数。此选项用于设置argv参数,这些参数由应用程序本身而不是由JVM处理。与JAVA_OPTS相同,您可以在env:的{​​{1}}块中进行设置。

  5. 就其价值而言,获得manifest.yml的原因是因为Java buildpack并未将bash: java: command not found放在PATH上。您需要设置javajava进程的完整路径。因此,如果您使用完整路径,则可以使自己所做的一切超出工作范围。也就是说,强烈建议您不要设置$HOME/.java-buildpack/open_jdk_jre/bin/java

  6. 旁注。请勿将command指向buildpack。执行此操作时,您将指向master分支,这是一个移动目标。通常,您应该使用平台提供的buildpack,即https://github.com/cloudfoundry/java-buildpack.git,或者将发布标签添加到cf buildpacks之类的URL中,以获取Java buildpack v4.26。

希望有帮助!

,

您可以在application.properties中声明它,它应该可以正常工作。

本文链接:https://www.f2er.com/3008028.html

大家都在问