codecamp

Spring Cloud PropertySource重新加载

某些应用程序可能需要检测外部属性源上的更改并更新其内部状态以反映新配置。当相关的ConfigMapSecret发生更改时,Spring Cloud Kubernetes的重载功能能够触发应用程序重载。

默认情况下,此功能处于禁用状态。您可以使用spring.cloud.kubernetes.reload.enabled=true配置属性(例如,在application.properties文件中)启用它。

支持以下级别的重载(通过设置spring.cloud.kubernetes.reload.strategy属性):* refresh(默认):仅重载用@ConfigurationProperties@RefreshScope注释的配置beans。 此重新加载级别利用了Spring Cloud上下文的刷新功能。* restart_context:整个Spring ApplicationContext已正常重启。用新配置重新创建Beans。* shutdown:Spring ApplicationContext已关闭,以激活容器的重启。 使用此级别时,请确保所有非守护程序线程的生命周期都绑定到ApplicationContext,并且已将复制控制器或副本集配置为重新启动Pod。

假设使用默认设置(refresh模式)启用了重新加载功能,则当配置映射更改时,将刷新以下bean:

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

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

    // getter and setters

}

要查看更改是否有效发生,您可以创建另一个bean来定期打印消息,如下所示

@Component
public class MyBean {

    @Autowired
    private MyConfig config;

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

您可以使用ConfigMap来更改应用程序打印的消息,如下所示:

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

与容器关联的ConfigMap中名为bean.message的属性的任何更改都会反映在输出中。更一般而言,将检测与属性相关联的更改,这些更改的前缀为@ConfigurationProperties注释的prefix字段定义的值。 本章前面已经说明了将ConfigMap与pod关联

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

重新加载功能支持两种操作模式:*事件(默认):使用Kubernetes API(web套接字)监视配置映射或机密的更改。任何事件都会对配置进行重新检查,并在发生更改的情况下重新加载。服务帐户上的view角色是必需的,以便侦听配置映射更改。秘密需要更高级别的角色(例如edit)(默认情况下,不监视秘密)。 *轮询:从配置上通过配置映射和机密重新创建配置,以查看配置是否已更改。您可以使用spring.cloud.kubernetes.reload.period属性来配置轮询时间,默认为15秒。它需要与受监视属性源相同的角色。例如,这意味着对文件挂载的秘密源使用轮询不需要特定的特权。

表140.3。Properties:

名称 类型 默认 描述

spring.cloud.kubernetes.reload.period

Duration

15s

使用polling策略时验证更改的期限

spring.cloud.kubernetes.reload.enabled

Boolean

false

启用监视属性源和配置重载

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

Boolean

true

允许监视配置映射中的更改

spring.cloud.kubernetes.reload.monitoring-secrets

Boolean

false

允许监视机密更改

spring.cloud.kubernetes.reload.strategy`

Enum

refresh

触发重新加载时使用的策略(refreshrestart_contextshutdown

spring.cloud.kubernetes.reload.mode

Enum

event

指定如何侦听属性源(eventpolling)中的更改


注意:*请勿在配置映射或机密中使用spring.cloud.kubernetes.reload下的属性。在运行时更改此类属性可能会导致意外结果。*使用refresh级别时,删除属性或整个配置图不会恢复beans的原始状态。


Spring Cloud 秘密PropertySource
Spring Cloud Ribbon在Kubernetes中发现
温馨提示
下载编程狮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; }