Spring Cloud PropertySource重新加載

2024-01-08 17:19 更新

某些應(yīng)用程序可能需要檢測(cè)外部屬性源上的更改并更新其內(nèi)部狀態(tài)以反映新配置。當(dāng)相關(guān)的ConfigMapSecret發(fā)生更改時(shí),Spring Cloud Kubernetes的重載功能能夠觸發(fā)應(yīng)用程序重載。

默認(rèn)情況下,此功能處于禁用狀態(tài)。您可以使用spring.cloud.kubernetes.reload.enabled=true配置屬性(例如,在application.properties文件中)啟用它。

支持以下級(jí)別的重載(通過設(shè)置spring.cloud.kubernetes.reload.strategy屬性):* refresh(默認(rèn)):僅重載用@ConfigurationProperties@RefreshScope注釋的配置beans。 此重新加載級(jí)別利用了Spring Cloud上下文的刷新功能。* restart_context:整個(gè)Spring ApplicationContext已正常重啟。用新配置重新創(chuàng)建Beans。* shutdown:Spring ApplicationContext已關(guān)閉,以激活容器的重啟。 使用此級(jí)別時(shí),請(qǐng)確保所有非守護(hù)程序線程的生命周期都綁定到ApplicationContext,并且已將復(fù)制控制器或副本集配置為重新啟動(dòng)Pod。

假設(shè)使用默認(rèn)設(shè)置(refresh模式)啟用了重新加載功能,則當(dāng)配置映射更改時(shí),將刷新以下bean:

@Configuration
@ConfigurationProperties(prefix = "bean")
public class MyConfig {

    private String message = "a message that can be changed live";

    // getter and setters

}

要查看更改是否有效發(fā)生,您可以創(chuàng)建另一個(gè)bean來定期打印消息,如下所示

@Component
public class MyBean {

    @Autowired
    private MyConfig config;

    @Scheduled(fixedDelay = 5000)
    public void hello() {
        System.out.println("The message is: " + config.getMessage());
    }
}

您可以使用ConfigMap來更改應(yīng)用程序打印的消息,如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: reload-example
data:
  application.properties: |-
    bean.message=Hello World!

與容器關(guān)聯(lián)的ConfigMap中名為bean.message的屬性的任何更改都會(huì)反映在輸出中。更一般而言,將檢測(cè)與屬性相關(guān)聯(lián)的更改,這些更改的前綴為@ConfigurationProperties注釋的prefix字段定義的值。 本章前面已經(jīng)說明了將ConfigMap與pod關(guān)聯(lián)。

完整的示例可在中找到spring-cloud-kubernetes-reload-example

重新加載功能支持兩種操作模式:*事件(默認(rèn)):使用Kubernetes API(web套接字)監(jiān)視配置映射或機(jī)密的更改。任何事件都會(huì)對(duì)配置進(jìn)行重新檢查,并在發(fā)生更改的情況下重新加載。服務(wù)帳戶上的view角色是必需的,以便偵聽配置映射更改。秘密需要更高級(jí)別的角色(例如edit)(默認(rèn)情況下,不監(jiān)視秘密)。 *輪詢:從配置上通過配置映射和機(jī)密重新創(chuàng)建配置,以查看配置是否已更改。您可以使用spring.cloud.kubernetes.reload.period屬性來配置輪詢時(shí)間,默認(rèn)為15秒。它需要與受監(jiān)視屬性源相同的角色。例如,這意味著對(duì)文件掛載的秘密源使用輪詢不需要特定的特權(quán)。

表140.3。Properties:

名稱 類型 默認(rèn) 描述

spring.cloud.kubernetes.reload.period

Duration

15s

使用polling策略時(shí)驗(yàn)證更改的期限

spring.cloud.kubernetes.reload.enabled

Boolean

false

啟用監(jiān)視屬性源和配置重載

spring.cloud.kubernetes.reload.monitoring-config-maps

Boolean

true

允許監(jiān)視配置映射中的更改

spring.cloud.kubernetes.reload.monitoring-secrets

Boolean

false

允許監(jiān)視機(jī)密更改

spring.cloud.kubernetes.reload.strategy`

Enum

refresh

觸發(fā)重新加載時(shí)使用的策略(refresh,restart_contextshutdown

spring.cloud.kubernetes.reload.mode

Enum

event

指定如何偵聽屬性源(eventpolling)中的更改


注意:*請(qǐng)勿在配置映射或機(jī)密中使用spring.cloud.kubernetes.reload下的屬性。在運(yùn)行時(shí)更改此類屬性可能會(huì)導(dǎo)致意外結(jié)果。*使用refresh級(jí)別時(shí),刪除屬性或整個(gè)配置圖不會(huì)恢復(fù)beans的原始狀態(tài)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)