spring cloud数据流应用程序属性/环境变量



让一个docker容器运行一个spring云数据流应用程序。在数据流的2.7.2版本之前,我能够将所有数据库url/username/password属性定义为容器中的环境变量,从而将它们传递给应用程序。

该应用程序定义了application.yml来从变量中获取属性,如下所示:

appname:
datasource:
url: ${APP_DB_URL:jdbc:sqlserver://127.0.0.1:1433}
password: ${APP_DB_PASSWORD:D3faultP4ss!}
username: ${APP_DB_USER:sa}

正如之前所说,这些变量可以通过将它们作为容器中的env变量来定义,现在从数据流2.8开始,这种方法似乎不再工作了。

安装程序被配置为在启动后自动将应用程序注册到春季云数据流,具有以下逻辑

第一次删除所有旧任务

curl "http://localhost:9393/tasks/definitions/${APP_NAME}?cleanup=false" -o /dev/null -s -w "%{http_code}" -X DELETE

第二次删除所有旧应用

curl "http://localhost:9393/apps" -o /dev/null -s -w "%{http_code}" -X DELETE

第三寄存器应用

curl "http://localhost:9393/apps/task/${APP_NAME}/${APP_VERSION}" -o /dev/null -s -w "%{http_code}" -X POST -d "uri=file%3A%2F%2Fapp%2F${APP_JAR}&force=true"

第4个寄存器任务

curl "http://localhost:9393/tasks/definitions" -o /dev/null -s -w "%{http_code}" -X POST -d "name=${APP_NAME}&definition=${APP_NAME}"

APP_NAME、APP_VERSION和APP_JAR是在构建阶段放入容器中的环境变量。

按计划,每天,通过以下调用触发作业:

curl "http://localhost:9393/tasks/executions" -o /dev/null -s -w "%{http_code}" -X POST -d "name=${APP_NAME}&properties=deployer.${APP_NAME}.local.workingDirectoriesRoot%3D%2Fapp%2Flogs&arguments=--date%3D$(date --date='yesterday' +%Y-%m-%d)+--range%3D${range}+--dataSource%3DApplication+SourceProperty"

如上所述,在2.7.2版本之前,这一直有效,现在当尝试更新到2.8或更高版本时,应用程序会尝试连接到application.yml中定义的默认数据库url。我如何使用env变量覆盖这些url?显然,如果有更好的方法来自动注册应用程序,我们将不胜感激。

Spring Cloud Data Flow 2.7.x使用了Spring Boot 2.3Spring Cloud Data Flow 2.8.x使用的Spring Boot 2.4

属性名称发生更改,数据源初始化将覆盖您的配置,除非您禁用数据源的自动配置。

我们建议您使用最新的Spring Cloud Data Flow,并将您的应用程序更新为Spring Boot 2.7.x您提供的属性如下:app.<appname>.spring.datasource.url

最新更新