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 级别 复制链接链接已复制到粘贴板!
以下级别的 reload 支持属性 spring.cloud.kubernetes.reload.strategy
:
- refresh
(默认) 仅重新加载标有
@ConfigurationProperties
或@RefreshScope
的配置 Bean。此重新加载级别利用 Spring Cloud 上下文的刷新功能。注意当重新加载策略设置为
刷新
时,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 操作模式 复制链接链接已复制到粘贴板!
重新载入功能支持两种操作模式:
- event
-
(默认) 监视使用 Kubernetes API (Web 套接字)的 ConfigMap 或 secret 中的更改。任何事件都将在配置上生成重新检查,并在发生更改时重新加载。需要服务帐户的
view
角色来侦听配置映射更改。更高级别角色(例如:secret 需要编辑)(默认不会监控secrets)。 - polling
-
定期从配置映射和 secret 重新创建配置,以查看它是否已改变。可以使用属性
spring.cloud.kubernetes.reload.period
配置轮询周期,默认为 15 秒。它要求角色与被监控的属性源相同。例如,这意味着,对已挂载的 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
、shutdown
)。type 是Enum
,默认为refresh
。 - spring.cloud.kubernetes.reload.mode
-
指定如何侦听属性源(
事件
、轮询
)。type 是Enum
,默认为事件
。 - spring.cloud.kubernetes.reload.period
-
使用
轮询
策略时验证更改的周期(毫秒)。类型为Long
,默认为15000
。
请注意以下几点:
-
spring.cloud.kubernetes.reload
gem 属性不应在 ConfigMap 或 Secret 中使用。在运行时更改这些属性可能会导致意外的结果 ; -
删除属性或整个配置映射在使用
刷新
级别时不会恢复 Bean 的原始状态。