Spring Cloud教程(十一)环境变化和刷新范围
应用程序将收听EnvironmentChangeEvent
,并以几种标准方式进行更改(用户可以以常规方式添加ApplicationListeners
附加ApplicationListeners
)。当观察到EnvironmentChangeEvent
时,它将有一个已更改的键值列表,应用程序将使用以下内容:
重新绑定上下文中的任何
@ConfigurationProperties
bean为
logging.level.*
中的任何属性设置记录器级别
请注意,配置客户端不会通过默认轮询查找Environment
中的更改,通常我们不建议检测更改的方法(尽管可以使用@Scheduled
注释进行设置)。如果您有一个扩展的客户端应用程序,那么最好将EnvironmentChangeEvent
广播到所有实例,而不是让它们轮询更改(例如使用Spring Cloud总线)。
EnvironmentChangeEvent
涵盖了大量的刷新用例,只要您真的可以更改Environment
并发布事件(这些API是公开的,部分内核为Spring)。您可以通过访问/configprops
端点(普通Spring Boot执行器功能)来验证更改是否绑定到@ConfigurationProperties
bean。例如,DataSource
可以在运行时更改其maxPoolSize
(由Spring Boot创建的默认DataSource
是一个@ConfigurationProperties
bean),并且动态增加容量。重新绑定@ConfigurationProperties
不会覆盖另一大类用例,您需要更多的控制刷新,并且您需要更改在整个ApplicationContext
上是原子的。为了解决这些担忧,我们有@RefreshScope
。
刷新范围
当配置更改时,标有@RefreshScope
的Spring @Bean
将得到特殊处理。这解决了状态bean在初始化时只注入配置的问题。例如,如果通过Environment
更改数据库URL时DataSource
有开放连接,那么我们可能希望这些连接的持有人能够完成他们正在做的工作。然后下一次有人从游泳池借用一个连接,他得到一个新的URL。
刷新范围bean是在使用时初始化的懒惰代理(即当调用一个方法时),并且作用域作为初始值的缓存。要强制bean重新初始化下一个方法调用,您只需要使其缓存条目无效。
RefreshScope
是上下文中的一个bean,它有一个公共方法refreshAll()
来清除目标缓存中的范围内的所有bean。还有一个refresh(String)
方法可以按名称刷新单个bean。此功能在/refresh
端点(通过HTTP或JMX)中公开。
注意
|
@RefreshScope (技术上)在@Configuration 类上工作,但可能会导致令人惊讶的行为:例如,这并不 意味着该类中定义的所有@Beans 本身都是@RefreshScope 。具体来说,任何取决于这些bean的东西都不能依赖它们在刷新启动时被更新,除非它本身在@RefreshScope (在其中将重新刷新并重新注入其依赖关系),那么它们将从刷新的@Configuration )重新初始化。 |
最新文章
- interface
- 我创建了一个网站,专门分享公众号的文章 https://asyons.com
- celery 快速入门教程 celery 定时器
- 李洪强iOS开发之OC语言基础知识
- iOS方法封装
- android应用中设置自动大写
- [manacher] hdu 3294 Girls&;#39; research
- [HTML5游戏开发]简单的《找没有同汉字版〗爆去考考您狄综力吧
- USACO 1.3.3 Prime Cryptarithm
- Cocos2D创建多彩文本显示标签
- PeopleSoft 后台更新密码
- JS获取键盘事件
- STS 安装SVN插件
- 泡泡堂BNB[ZJOI2008]
- Vue学习(4)
- Mac下R语言环境搭建
- 如何修改MSSQL的用户名
- 000 Jquery的Hello World程序
- 构造函数constructor 与析构函数destructor(一)
- Mac下 Windows 7 虚拟机搭建SVN服务器的详细步骤(此方法同样适用于单纯的Windows系统搭建SVN)
热门文章
- 宏定义 #define CH_SENS(a,b) 0x##a##b
- Apache 强制SSL访问
- python爬取b站排行榜
- BeautifulSoup库的基本元素
- QT linux下显示中文的问题
- HNUSTOJ-1565 Vampire Numbers(暴力打表)
- 思维体操: HDU1049Climbing Worm
- nginx动静分离与网关
- Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField 关联关系字段 (Relationship fields)
- gp指标信息