我们已经使用Spring Cloud Config超过3年了,并且已经很好地理解了bootstrap.yml
,application.yml
,测试属性,环境变量,系统属性和之间的Spring配置属性的优先顺序。弹簧型材。在我们今天遇到这个问题之前,至少就是这种情况。我们正在使用Spring Boot 1.4.5。
我在application.yml
中定义了两个属性,如下所示:
property:
one: foobar
two: "{cipher}s0m3encRypt3dv4lu3d0td0td0t"
如果我启动Spring Boot应用程序并打印这两个属性的值,我会看到以下内容 - 所有这些都是预期的:
property.one=foobar
property.two=DecryptedValue
现在,如果我尝试通过系统属性(使用-D
选项或作为--
的程序参数)覆盖这两个属性,我会看到一些有趣的结果:
java -Dproperty.one=barfoo -Dproperty.two=WontWork -jar my-spring-boot-app.jar
OR
java -jar my-spring-boot-app.jar --property.one=barfoo -property.two=WontWork
有了这个,当我在我的应用程序中打印属性时,我看到的值如下:
property.one=barfoo
property.two=DecryptedValue
如您所见,property.one
按预期被覆盖,但property.two
没有;后者从application.yml
中选择了值。
当我转到Spring Boot应用程序的/ env端点时,我发现decrypted
属性显示在列表顶部,让我在定义加密属性时认为是,它application.yml
中的值始终优先于以后重写该属性值的任何尝试。
我在Spring Cloud Config或Spring Boot文档中找不到任何引用。如果有人可以告诉我(1)这是否是在以后版本中可能修复的错误,和/或(2)有一种方法可以覆盖此行为。