codecamp

SpringCloud 刷新范围

进行配置更改时,标记为​@RefreshScope​的Spring ​@Bean​将得到特殊处理。此功能解决了状态beans的问题,该状态仅在初始化时才注入配置。例如,如果通过​Environment​更改数据库URL时DataSource具有打开的连接,则您可能希望这些连接的持有者能够完成他们正在做的事情。然后,下次某物从池中借用一个连接时,它将获得一个具有新URL的连接。

有时,甚至可能必须将​@RefreshScope​批注应用到只能初始化一次的某些beans上。如果bean是“不可变的”,则必须用​@RefreshScope​注释bean或在属性键​spring.cloud.refresh.extra-refreshable​下指定类名。

重要

如果您自己创建一个​DataSource​ bean,而实现是一个​HikariDataSource​,则返回最特定的类型,在这种情况下为​HikariDataSource​。否则,您将需要设置​spring.cloud.refresh.extra-refreshable=javax.sql.DataSource​。

刷新作用域beans是惰性代理,它们在使用时(即在调用方法时)进行初始化,并且作用域充当初始化值的缓存。若要强制bean在下一个方法调用上重新初始化,必须使它的缓存条目无效。

RefreshScope​在上下文中是bean,并具有公用的​refreshAll()​方法,可通过清除目标缓存来刷新作用域中的所有beans。​/refresh​端点公开了此功能(通过HTTP或JMX)。要按名称刷新单个bean,还有一个​refresh(String)​方法。

要公开​/refresh​端点,您需要在应用程序中添加以下配置:

management:
  endpoints:
    web:
      exposure:
        include: refresh

@RefreshScope​在​@Configuration​类上(在技术上)有效,但是可能会导致令人惊讶的行为。例如,这并不意味着该类中定义的所有​@Beans​本身都在​@RefreshScope​中。具体而言,除非刷新本身在​@RefreshScope​中,否则依赖那些beans的任何内容都不能依赖于刷新启动时对其进行更新。在这种情况下,将在刷新时重建它,并重新注入其依赖项。此时,它们将从刷新的​@Configuration​重新初始化。


SpringCloud 环境变化
SpringCloud 加密和解密
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

三、Spring Cloud Netflix

SpringCloud Hystrix超时和Ribbon客户

SpringCloud 重试失败的请求

五、Spring Cloud Stream

六、SpringCloud Binder实现

SpringCloud 重试RabbitMQ Binder

SpringCloud Dead-Letter队列处理

八、Spring Cloud Sleuth

SpringCloud 当前Span

十二、Spring Cloud for Cloud Foundry

十三、Spring Cloud Contract

Spring Cloud Contract验证程序设置

SrpingCloud Gradle项目

十五、Spring Cloud网关

Spring Cloud 配置路由谓词工厂和网关过滤工厂

Spring Cloud TLS / SSL

Spring Cloud网关配置

SpringCloud 故障排除

十八、Spring Cloud GCP

Spring Cloud GCP Spring资源

Spring Cloud Spring JDBC

Spring Cloud Redis的Cloud Memorystore

Spring Cloud 云身份识别代理(IAP)身份验证

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }