在Cloudfoundry上运行的Spring Cloud数据流上部署任务时,如何将参数传递给buildpack?

时间:2019-08-26 14:53:33

标签: spring cloudfoundry spring-cloud-dataflow

我在Cloudfoundry(Swisscom)上运行Spring Cloud Data Flow服务器。我能够正确注册一个任务(Spring Boot),但是由于使用了错误的Java运行时,任务无法启动:

   2019-08-26T11:30:41.57+0200 [APP/TASK/t1-x/0] OUT JVM Memory Configuration: -Xmx435467K -Xss1M -XX:ReservedCodeCacheSize=240M -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=101108K
   2019-08-26T11:30:41.80+0200 [APP/TASK/t1-x/0] ERR Exception in thread "main" java.lang.UnsupportedClassVersionError: ch/xxx/task1/Task1Application has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
   2019-08-26T11:30:41.80+0200 [APP/TASK/t1-x/0] ERR    at java.lang.ClassLoader.defineClass1(Native Method)

确定这是由于cloudfoundry java_buildpack没有使用正确的Java版本引起的。通常,这很容易解决,我在部署应用程序时只需传递以下env变量:

JBP_CONFIG_OPEN_JDK_JRE: '{jre: { version: 11.+ }}'

但是,当SCDF部署taks-application时,我该怎么做?我知道有一个参数deployer.cloudfoundry.buildpack=java_buildpack可以在启动任务时使用,但是如何将参数/环境变量传递给buildpack?

更新:

目前,有关此问题有两个未解决的问题:

2 个答案:

答案 0 :(得分:0)

您可以在启动任务时传递部署程序属性,如下所示:

task launch <task-name> --properties "deployer.<app-name>.cloudfoundry.<deployerProperty>"

在这种情况下,要传递buildpack部署程序属性,您可以执行以下操作:

task launch <task-name> --properties "deployer.<app-name>.cloudfoundry.buildpack=<?>"

答案 1 :(得分:0)

看起来环境变量在任务定义中被指定为属性。参见https://github.com/spring-cloud/spring-cloud-deployer-cloudfoundry/blob/master/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppDeployer.java#L278

在这种情况下,您必须为Cloud Foundry部署程序use-spring-application-json=false设置部署属性

还请注意,在推送应用程序时会应用环境变量,这只会在首次启动任务时发生。如果该应用程序已经存在,则需要将其删除才能生效。