刷新Spring Boot自动配置的属性

时间:2018-06-04 20:24:31

标签: spring spring-boot spring-cloud-config spring-config

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

我想我说得太早了,至少就我的row_number例子而言。正在使用更新的道具创建新的数据库连接。

特别是在查看文档here

时,这是有道理的

这并没有重新连接我的一些row_number() over (partition by userid order by timestamp desc)属性,但在这种情况下,我可以用DataSource解决问题。

答案 1 :(得分:0)

如果 Autoconfigured 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