9.5. 使用 PropertySource Reload
有些应用程序可能需要检测外部属性源的更改,并更新其内部状态以反映新的配置。Spring Cloud Kubernetes 的 reload 功能可以在相关的 ConfigMap 或 Secret 更改时触发应用程序重新加载。
9.5.1. 启用 PropertySource Reload 复制链接链接已复制到粘贴板!
Spring Cloud Kubernetes 的 PropertySource reload
功能被默认禁用。
流程
-
进入 Quickstart 项目的
src/main/resources
目录,再打开bootstrap.yml
文件。 -
更改配置属性
spring.cloud.kubernetes.reload.enabled=true
。
9.5.2. PropertySource Reload 的级别 复制链接链接已复制到粘贴板!
属性 spring.cloud.kubernetes.reload.strategy
支持以下重新加载级别:
- refresh
(默认) 仅重新加载使用
@ConfigurationProperties
或@RefreshScope
注解的配置 Bean。此重新加载级别利用 Spring Cloud Context 的刷新功能。注意当 reload 策略被设置为
刷新
时,PropertySource reload 功能只能用于 简单 属性(即,而不是集合)。由集合支持的属性不能在运行时更改。- restart_context
- 整个 Spring ApplicationContext 已安全重启。Bean 使用新配置重新创建。
- shutdown
- Spring ApplicationContext 被关闭以激活容器重启。在使用此级别时,请确保所有非守护进程线程的生命周期都绑定到 ApplicationContext,并且复制控制器或副本集已配置为重启 pod。
9.5.3. PropertySource Reload 示例 复制链接链接已复制到粘贴板!
以下示例解释了启用重新加载功能时会发生什么。
流程
假设使用默认设置(刷新 模式)启用了重新加载功能。配置映射更改时将刷新以下 bean:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看发生的更改,请创建另一个 bean,以定期打印消息,如下所示。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用 ConfigMap 更改应用程序打印的消息,如下所示。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对与 pod 关联的 Config Map 中名为
bean.message
的属性的任何更改都会反映在程序的输出中。
9.5.4. PropertySource Reload Operating Modes 复制链接链接已复制到粘贴板!
reload 功能支持两种操作模式:
- event
-
(默认) 监视使用 Kubernetes API (Web 套接字)的 ConfigMap 或 secret 的更改。在更改时,任何事件都会对配置生成重新检查,并重新加载。要侦听配置映射更改,需要服务帐户的
view
角色。更高级别的角色(例如,secret需要编辑
)(默认情况下不监控secrets)。 - 轮询
-
从配置映射和 secret 定期重新创建配置,以查看它是否已更改。可以使用属性
spring.cloud.kubernetes.reload.period
配置轮询周期,默认为 15 秒。它需要与 monitored 属性源相同的角色。例如,在文件挂载的 secret 源上使用轮询不需要特定的特权。
9.5.5. PropertySource Reload 配置属性 复制链接链接已复制到粘贴板!
以下属性可用于配置重新载入功能:
- spring.cloud.kubernetes.reload.enabled
-
启用对属性源和配置重新加载的监控。type 是
布尔值
,默认为false
。 - spring.cloud.kubernetes.reload.monitoring-config-maps
-
允许配置映射中的监控更改。type 是
布尔值
,默认为true
。 - spring.cloud.kubernetes.reload.monitoring-secrets
-
允许监控 secret 中的更改。type 是
布尔值
,默认为false
。 - spring.cloud.kubernetes.reload.strategy
-
触发重新加载时使用的策略(
刷新
、restart_context
、关闭
)。type 为Enum
,默认为refresh
。 - spring.cloud.kubernetes.reload.mode
-
指定如何侦听属性源中的更改(
事件
、轮询
)。type 为Enum
,默认为event
。 - spring.cloud.kubernetes.reload.period
-
使用
轮询
策略时验证更改的时间(以毫秒为单位)。type 为Long
,默认为15000
。
请注意以下几点:
-
spring.cloud.kubernetes.reload
SetConfiguration 属性不应在 ConfigMap 或 Secret 中使用。在运行时更改这些属性可能会导致意外的结果; -
删除属性或整个配置映射在使用
刷新
级别时不会恢复 Bean 的原始状态。