我在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?
更新:
目前,有关此问题有两个未解决的问题:
答案 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
设置部署属性
还请注意,在推送应用程序时会应用环境变量,这只会在首次启动任务时发生。如果该应用程序已经存在,则需要将其删除才能生效。