首页 > 解决方案 > Spring Cloud Config 双引导文件行为

问题描述

我有一个设置,我正在使用以下内容:

我目前通过自定义脚本将 Swarm 机密传递给客户端,该脚本读取放入 /run/secrets/ 的文件并创建 /config/bootstrap.properties 文件。它最终看起来像这样:

spring.cloud.config.username=user
spring.cloud.config.password=password

我的 Docker 映像的默认命令是这样的:

java -Djava.security.egd=file:/dev/./urandom -jar /${appName}.jar --spring.cloud.bootstrap.location=file:/config/bootstrap.properties"

伟大的。这工作没有问题。该应用程序似乎是这样写的:

现在。我正在使用 Finchley.RELEASE 将应用程序移至 Spring Boot 2.0.3,这会中断。

现在发生的事情是:

问题是应用程序现在缺少在内部 bootstrap.yml 中设置的属性,因此它在启动时会爆炸。通过做同样的事情,我已经能够在容器环境之外重现它;将应用程序指向外部 bootstrap.properties。如果我将 bootstrap.yml 属性复制到 bootstrap.properties 中,那么它就可以正常工作。此外,如果我不提供外部属性文件,那么内部 bootstrap.yml 将毫无问题地启动。所以要么是一个,要么是另一个!

我还尝试修改引导位置以包含默认位置,但没有运气:

-- spring.cloud.bootstrap.location=file:/config/bootstrap.properties,classpath:,classpath:/config,file:,file:config/

有什么想法下一步该去哪里看吗?也许我缺少一个新的 spring.cloud.config 属性?或者任何人都可以确认哪种行为是正确的行为?假设他们修复了 Finchley 中的一个潜在漏洞,那么我可以搁置它并寻找另一个解决方案。如果它在 Finchley 中“坏了”,我想问题报告是为了?

标签: spring-bootproperties-filespring-cloud-config

解决方案


好吧,更多的挖掘表明它看起来像是新的行为:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide

spring.config.location 配置的行为已修复;它以前在默认位置列表中添加了一个位置,现在它替换了默认位置。如果您依赖之前的处理方式,您现在应该改用 spring.config.additional-location 。

它看起来不是 Spring Cloud 特定的,但我没有什么可失去的。更改我的 java 命令以使用这个新属性就可以了:

--spring.config.additional-location=file:/config/bootstrap.properties

谢谢。


推荐阅读