|
此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Cloud Kubernetes 3.3.0! |
PropertySource重新加载
| 此功能已在 2020.0 版本中弃用。请看 Spring Cloud Kubernetes Configuration Watcher 控制器,以实现相同功能的替代方法。 |
某些应用程序可能需要检测外部属性源的更改并更新其内部状态以反映新配置。
Spring Cloud Kubernetes 的重新加载功能能够在相关ConfigMap或Secret变化。
默认情况下,此功能处于禁用状态。您可以使用spring.cloud.kubernetes.reload.enabled=trueconfiguration 属性(例如,在application.properties文件)。
请注意,这将仅启用对配置映射的监控(即:spring.cloud.kubernetes.reload.monitoring-config-maps将设置为true).
如果要启用对密钥的监控,则必须通过以下方式显式完成:spring.cloud.kubernetes.reload.monitoring-secrets=true.
支持以下级别的重新加载(通过将spring.cloud.kubernetes.reload.strategy属性):
-
refresh(默认):仅配置 bean 用@ConfigurationProperties或@RefreshScope被重新加载。 此重新加载级别利用了 Spring Cloud Context 的刷新功能。 -
restart_context:整个SpringApplicationContext正常重启。使用新配置重新创建 Bean。 为了使重启上下文功能正常工作,必须启用并公开重启执行器端点
management:
endpoint:
restart:
enabled: true
endpoints:
web:
exposure:
include: restart
-
shutdown:SpringApplicationContext关闭以激活容器的重启。 使用此级别时,请确保所有非守护线程的生命周期都绑定到ApplicationContext并且复制控制器或副本集配置为重新启动容器。
假设使用默认设置 (refreshmode),当配置映射更改时,以下 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!
对名为bean.message在ConfigMap与 Pod 关联的
输出。更一般地说,与以prefix字段的@ConfigurationProperties注释被检测并反映在应用程序中。关联一个ConfigMap带吊舱在本章前面对此进行了解释。
重新加载功能支持两种作模式:
-
事件(默认):使用 Kubernetes API(Web 套接字)监视配置映射或密钥的更改。 任何事件都会对配置进行重新检查,如果发生更改,则会重新加载。 这
view需要服务帐户上的角色才能监听配置映射更改。更高级别的角色(例如edit) 是机密所必需的 (默认情况下,不监控机密)。 -
轮询:定期从配置映射和密钥重新创建配置,以查看它是否已更改。 您可以使用
spring.cloud.kubernetes.reload.period属性,默认为 15 秒。 它需要与受监视的属性源相同的角色。 这意味着,例如,对文件挂载的机密源使用轮询不需要特定的权限。