W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
進(jìn)行配置更改時(shí),標(biāo)記為?@RefreshScope
?的Spring ?@Bean
?將得到特殊處理。此功能解決了狀態(tài)beans的問題,該狀態(tài)僅在初始化時(shí)才注入配置。例如,如果通過?Environment
?更改數(shù)據(jù)庫URL時(shí)DataSource具有打開的連接,則您可能希望這些連接的持有者能夠完成他們正在做的事情。然后,下次某物從池中借用一個(gè)連接時(shí),它將獲得一個(gè)具有新URL的連接。
有時(shí),甚至可能必須將?@RefreshScope
?批注應(yīng)用到只能初始化一次的某些beans上。如果bean是“不可變的”,則必須用?@RefreshScope
?注釋bean或在屬性鍵?spring.cloud.refresh.extra-refreshable
?下指定類名。
重要
如果您自己創(chuàng)建一個(gè)?
DataSource
? bean,而實(shí)現(xiàn)是一個(gè)?HikariDataSource
?,則返回最特定的類型,在這種情況下為?HikariDataSource
?。否則,您將需要設(shè)置?spring.cloud.refresh.extra-refreshable=javax.sql.DataSource
?。
刷新作用域beans是惰性代理,它們?cè)谑褂脮r(shí)(即在調(diào)用方法時(shí))進(jìn)行初始化,并且作用域充當(dāng)初始化值的緩存。若要強(qiáng)制bean在下一個(gè)方法調(diào)用上重新初始化,必須使它的緩存條目無效。
?RefreshScope
?在上下文中是bean,并具有公用的?refreshAll()
?方法,可通過清除目標(biāo)緩存來刷新作用域中的所有beans。?/refresh
?端點(diǎn)公開了此功能(通過HTTP或JMX)。要按名稱刷新單個(gè)bean,還有一個(gè)?refresh(String)
?方法。
要公開?/refresh
?端點(diǎn),您需要在應(yīng)用程序中添加以下配置:
management:
endpoints:
web:
exposure:
include: refresh
?
@RefreshScope
?在?@Configuration
?類上(在技術(shù)上)有效,但是可能會(huì)導(dǎo)致令人驚訝的行為。例如,這并不意味著該類中定義的所有?@Beans
?本身都在?@RefreshScope
?中。具體而言,除非刷新本身在?@RefreshScope
?中,否則依賴那些beans的任何內(nèi)容都不能依賴于刷新啟動(dòng)時(shí)對(duì)其進(jìn)行更新。在這種情況下,將在刷新時(shí)重建它,并重新注入其依賴項(xiàng)。此時(shí),它們將從刷新的?@Configuration
?重新初始化。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: