刷新 Spring 引导自动配置的属性

Refresh Spring Boot Auto-Configured Properties

我可以动态刷新 Spring 引导的自动配置设置使用的属性吗?

例如,我设置了以下属性(通过云配置)来自动配置 dataSource:

spring.datasource.username=user1
spring.datasource.password=test

现在,如果我更改配置服务器上的密码道具,并点击 /refresh 端点,我可以看到更新的道具已检索但 DataSource 未刷新。

我知道我可以手动配置 DataSource beans 并确保它们属于 RefreshScope,但我希望找到一种方法将自动配置的属性标记为 "refreshable".我有一些用例,我想为 DataSources 之外的其他 bean 刷新 Spring Boot 使用的道具,手动设置其中一些 bean 可能会很痛苦。

我想我说得太早了,至少就我的 DataSource 示例而言是这样。正在使用更新的 props 创建一个新的数据库连接。

这很有意义,尤其是在查看文档时 here

这并没有重新连接我拥有的一些 spring.cloud.stream.bindings 属性,但在那种情况下,我可能可以通过 @RefreshScope.

解决问题

有一个配置 属性 需要设置以防自动配置的 bean 是不可变的(初始化后不要更改属性)

你可以放一个类的列表(集),你需要刷新的,你对源代码没有控制权,你可以把它们放在属性下面:spring.cloud.refresh.extra-refreshable

例如:

spring
  cloud
    refresh
      extra-refreshable:
        - org.springframework.mail.javamail.JavaMailSenderImpl

参见:https://cloud.spring.io/spring-cloud-static/Greenwich.SR1/single/spring-cloud.html#refresh-scope