Spring 云配置服务器 - 如何添加在 EnvironmentEncryptorEnvironmentRepository 的 findOne() 方法中可见的自定义 PropertySource
Spring cloud config server - how to add custom PropertySource visible in findOne() method of EnvironmentEncryptorEnvironmentRepository
我的目标 是将自定义 PropertySource 添加到 spring-cloud-server。我想要实现的是从 spring-cloud-config-client 应用程序中的自定义源获取一些自定义属性。
基于 I've created spring-cloud-config-server
application and separate project spring-cloud-config-custom
. Second one is based on spring-cloud-consul-config 代码的建议。因此,我创建了所有必要的 类,如 CustomPropertySource
、CustomPropertySourceLocator
、CustomConfigBootstrapConfiguration
等,并在 spring.factories
中配置了它们。
最后,我在 spring-cloud-config-server
中添加了对 spring-cloud-config-custom
的 Maven 依赖。
到目前为止一切顺利。一切正常。当我启动服务器时,我可以看到我的 CustomPropertySource
在 EnviromentRepository
bean 中的 属性Sources 列表中注入到 EnvironmentController
.
问题: 当我向 @RequestMapping("/{name}/{profiles}/{label:.*}")
(在 EnvironmentController
中)发送 GET 请求时,注入的 EnviromentRepository
bean 被用于查找请求属性 来源(repository.findOne(name, profiles, label)
方法)。
不幸的是,我的 属性 来源在这里找不到。为什么?
我花了很多时间调试它。我发现存储库将 findOne()
方法调用委托给其他存储库:MultipleJGitEnvironmentRepository
将其委托给 NativeEnvironmentRepository
。在这个委托中,findOne() 方法不使用来自 EnviromentRepository
的 属性Sources 主要注入到控制器。它使用新的 PropertySources 列表和新的独立 SpringApplication 创建新的环境存储库。最后,此列表不包含我的 CustomPropertySource
,这就是为什么 findOne()
returns 空 属性Sources 导致 Environment
对象。
- 我是不是做错了什么?
CustomPropertySourceLocator
(and/or ConsulPropertySourceLocator
) 应该在 spring-cloud-config-server
或 spring-cloud-config-client
[=59= 中使用 (autowired/bootstrapped) ]
- spring-cloud-config-server 可以通过 REST 接口同时提供许多不同类型的
PropertySources
(说 "different" 我的意思是所有 Git , 领事和动物园管理员)?
您正在做的是将 属性 源添加到配置服务器本身,而不是它所服务的配置。将 spring-boot-starter-actuator
添加到您的配置服务器并查看 /env
显示:
{
"profiles": [
],
"server.ports": {
"local.server.port": 8888
},
"bootstrapProperties:custom": {
"test.prop3": "CUSTOM-VALUE-3",
"test.prop2": "CUSTOM-VALUE-2",
"test.prop1": "CUSTOM-VALUE-1"
},
}
要添加将由配置服务器提供的内容,您必须实施 EnvironmentRepository
。
对复合 EnvironmentRepository
的支持为 recently added。
我的目标 是将自定义 PropertySource 添加到 spring-cloud-server。我想要实现的是从 spring-cloud-config-client 应用程序中的自定义源获取一些自定义属性。
基于 spring-cloud-config-server
application and separate project spring-cloud-config-custom
. Second one is based on spring-cloud-consul-config 代码的建议。因此,我创建了所有必要的 类,如 CustomPropertySource
、CustomPropertySourceLocator
、CustomConfigBootstrapConfiguration
等,并在 spring.factories
中配置了它们。
最后,我在 spring-cloud-config-server
中添加了对 spring-cloud-config-custom
的 Maven 依赖。
到目前为止一切顺利。一切正常。当我启动服务器时,我可以看到我的 CustomPropertySource
在 EnviromentRepository
bean 中的 属性Sources 列表中注入到 EnvironmentController
.
问题: 当我向 @RequestMapping("/{name}/{profiles}/{label:.*}")
(在 EnvironmentController
中)发送 GET 请求时,注入的 EnviromentRepository
bean 被用于查找请求属性 来源(repository.findOne(name, profiles, label)
方法)。
不幸的是,我的 属性 来源在这里找不到。为什么?
我花了很多时间调试它。我发现存储库将 findOne()
方法调用委托给其他存储库:MultipleJGitEnvironmentRepository
将其委托给 NativeEnvironmentRepository
。在这个委托中,findOne() 方法不使用来自 EnviromentRepository
的 属性Sources 主要注入到控制器。它使用新的 PropertySources 列表和新的独立 SpringApplication 创建新的环境存储库。最后,此列表不包含我的 CustomPropertySource
,这就是为什么 findOne()
returns 空 属性Sources 导致 Environment
对象。
- 我是不是做错了什么?
CustomPropertySourceLocator
(and/orConsulPropertySourceLocator
) 应该在spring-cloud-config-server
或spring-cloud-config-client
[=59= 中使用 (autowired/bootstrapped) ]- spring-cloud-config-server 可以通过 REST 接口同时提供许多不同类型的
PropertySources
(说 "different" 我的意思是所有 Git , 领事和动物园管理员)?
您正在做的是将 属性 源添加到配置服务器本身,而不是它所服务的配置。将 spring-boot-starter-actuator
添加到您的配置服务器并查看 /env
显示:
{
"profiles": [
],
"server.ports": {
"local.server.port": 8888
},
"bootstrapProperties:custom": {
"test.prop3": "CUSTOM-VALUE-3",
"test.prop2": "CUSTOM-VALUE-2",
"test.prop1": "CUSTOM-VALUE-1"
},
}
要添加将由配置服务器提供的内容,您必须实施 EnvironmentRepository
。
对复合 EnvironmentRepository
的支持为 recently added。