【问题标题】:How @Value in Spring works internally so it could read Kubernetes ConfigMap?Spring 中的 @Value 如何在内部工作以便它可以读取 Kubernetes ConfigMap?
【发布时间】:2021-08-05 17:12:48
【问题描述】:

我很好奇 @Value 如何在 Spring 内部工作,以便它实际上可以从 Kubernetes 集群的 ConfigMap 读取值。

我知道:

  • @Value("${my.nested.variable}") 用于访问变量 在application.properties 或操作系统的环境变量中声明 (更高的优先级)。
  • 在 kubernetes 上创建新的 ConfigMap(用于 Spring 项目)时,通常会使用 kubectl create configmap my-config-name --from-file=application.properties,它会神奇地将这些 ConfigMap 值与 Spring 上的相应 @Value() 连接起来,当然我们必须选择 my-config-name on部署 YAML 文件。

注意上面我们没有暴露/映射那些配置映射到容器的环境变量,已经用printenv检查了内部容器,找不到。 但是,Spring 仍然能够从 ConfigMap 中检索这些值以用于 java 程序。

这怎么可能?有谁知道 Spring 的 @Value 是如何工作的,或者 ConfigMap 在内部是如何工作的,所以这两者可以神奇地连接起来?

谢谢。

【问题讨论】:

  • 我不确定你的意思是什么,但没有魔法。您正在从@Values 使用的相同application.properties 创建您的ConfigMap。这就是地图的来源
  • Spring Cloud Kubernetes 知道read a ConfigMap,大概使用Kubernetes API;我没想到魔法会特别神奇。
  • 你好@xcode。上面的 cmets 有没有回答你的问题?

标签: java spring kubernetes


【解决方案1】:

这是一个社区 wiki 答案。随意扩展它。

正如 David Maze 在 cmets 中已经提到的,Spring Cloud Kubernetes 正在使用 Kubernetes API 读取 ConfigMaps。其背后的机制在链接文档中进行了描述。

【讨论】:

    猜你喜欢
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多