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 代码的建议。因此,我创建了所有必要的 类,如 CustomPropertySourceCustomPropertySourceLocatorCustomConfigBootstrapConfiguration 等,并在 spring.factories 中配置了它们。

最后,我在 spring-cloud-config-server 中添加了对 spring-cloud-config-custom 的 Maven 依赖。

到目前为止一切顺利。一切正常。当我启动服务器时,我可以看到我的 CustomPropertySourceEnviromentRepository 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 对象。

  1. 我是不是做错了什么?
  2. CustomPropertySourceLocator (and/or ConsulPropertySourceLocator) 应该在 spring-cloud-config-serverspring-cloud-config-client[=59= 中使用 (autowired/bootstrapped) ]
  3. 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