当前位置: 首页 > 知识库问答 >
问题:

刷新Spring Boot自动配置属性

慕容修伟
2023-03-14

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

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

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

现在,如果我更改配置服务器上的密码道具,并命中/刷新终结点,我可以看到已检索到更新的道具,但没有刷新DataSource

我知道我可以手动配置数据源bean,并确保它们属于刷新范围,但我希望找到一种方法将自动配置的属性标记为“可刷新”。我有一些用例,我想刷新Spring Boot为数据源之外的其他bean使用的道具,手动设置这些bean可能会很痛苦。

共有2个答案

危钱明
2023-03-14

如果自动配置的bean是不可变的,则需要设置一个配置属性(初始化后不要更改属性)

您可以将需要刷新且无法控制源代码的类的列表(集合)放在属性:spring下。云刷新额外刷新功能

例如。:

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

宋高扬
2023-03-14

我想我说得太快了,至少就我的数据源示例而言。正在使用更新的道具创建新的db连接。

这是有意义的,尤其是在这里查看文档时

这没有重新连接我的一些spring。云流动绑定属性,但在这种情况下,我可能可以使用@RefreshScope解决这个问题。

 类似资料:
  • 我已经配置了spring cloud config,它从GitHub获取属性。如果发送到,我还可以在应用程序中获得更新的值。 我是否需要为它实现Rabbitmq和云总线,或者有任何其他简单的方法来实现它?另外,该文档指出,我们需要为推送通知添加对spring-cloud-config-monitor库的依赖关系。http://projects.spring.io/spring-cloud/spri

  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类

  • 我有一个SpringBoot应用程序,它使用配置服务器加载其属性。属性存在于src中。配置服务器项目的main/resources/config目录。 当我到达restfulendpoint时,属性初始加载良好,然后当我更改属性时,它仍然显示旧的属性值。如何在调用URL时调用刷新终结点?我是在配置服务还是你好服务上调用它?即使从日志看起来已经映射了它们,它仍然会抛出405错误 配置服务器 或者你好

  • 我正在使用PCF提供的配置服务器实例,该实例由基于GIT的repo-to-server属性支持。我的应用程序连接到此配置服务器服务实例,并公开“刷新”endpoint。除了在更新属性后立即更改git中的属性并将http post发送到应用程序(/actuator/refresh)之外,其他一切都正常工作,我没有得到更新的prop name作为响应。如果我等待几秒钟,然后再次发送http post以

  • 本文向大家介绍浅谈springboot自动配置原理,包括了浅谈springboot自动配置原理的使用技巧和注意事项,需要的朋友参考一下 从main函数说起 一切的开始要从SpringbootApplication注解说起。 其中最重要的就是EnableAutoConfiguration注解,开启自动配置。 通过Import注解导入AutoConfigurationImportSelector。在这

  • 想象一下,如果要直播比赛的比分,或股票市场的实时状态,或当前的外汇配给,该怎么实现呢?显然,要实现这种实时功能,您就不得不规律性地刷新页面。 JSP提供了一种机制来使这种工作变得简单,它能够定时地自动刷新页面。 刷新一个页面最简单的方式就是使用response对象的setIntHeader()方法。这个方法的签名如下: public void setIntHeader(String header