我在spring boot中定义了自定义PropertySource
,它执行属性的解密。当我在我的应用程序代码中请求属性值时,一切正常,但是我注意到框架使用/加载了一些属性。 (我记录通过PropertySource请求的每个属性)
即。未加载以下内容:
http.mappers.json-pretty-print=true
server.ssl.key-store-type=....
server.ssl.key-store=....
server.ssl.key-store-passsowrd=....
server.ssl.key-password=....
我注意到,如果我的PropertySource extednds EnumerablePropertySource<Properties>
,一切都按预期工作。
为什么?为什么我必须扩展EnumerablePropertySource?
答案 0 :(得分:3)
Spring Boot在binding configuration时使用DataBinder
。 DataBinder
需要PropertyValues
实现作为要绑定的属性的源。 PropertyValues
合同的一部分是提供对所有已知属性值的访问。适配器PropertySourcesPropertyValues
用于将所有应用程序的PropertySource
公开为PropertyValues
实现。如果您的自定义PropertySource
不是EnumerablePropertySource
,则适配器无法访问其所有属性,因此不会包含它们。