如何使用Spring Cloud将属性从Kubernetes配置Map加载到Sping Boot 应用程序中?

kninwzqo  于 2023-04-06  发布在  Spring
关注(0)|答案(1)|浏览(143)

我正尝试使用Spring Cloud Kubernetes Fabric8将属性从K8s配置Map加载到我的Sping Boot 服务中,如本文中的Spring Cloud文档所述。
我的服务的configmap看起来像这样:

apiVersion: v1
kind: ConfigMap
metadata:
  name: foo-my-service
  namespace: foo
  labels:
    helm.sh/chart: my-service-1.0.0-SNAPSHOT
    app.kubernetes.io/name: my-service
    app.kubernetes.io/instance: foo
    app.kubernetes.io/version: "1.0.0-SNAPSHOT"
    app.kubernetes.io/managed-by: Helm
data:
  spring.datasource.url: jdbc:postgresql://foo-postgresql/mydb

我的Sping Boot application.yaml看起来像这样:

spring:
  application:
    name: foo-my-service
  cloud:
    kubernetes:
      secrets:
        enable-api: true

我使用Fabric8与k8s通信。这个依赖项在我的Maven pom中作为org.springframework.cloud:spring-cloud-starter-kubernetes-fabric8-config:jar:3.0.1引入。
我使用的是Sping Boot 版本3.0.3和Spring Cloud 2022.0.1。
根据Spring Cloud文档,我期望发生的是,我的spring.datasource.url属性将从configmap中的值设置。
实际发生的情况是没有检测到该属性,并且当Sping Boot 应用程序尝试使用该属性运行Flyway迁移时,它无法启动。

│ Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.                                                                                                                                       │
│ Reason: Failed to determine suitable jdbc url                                                                                                                                                                                                            │

如果我将Sping Boot 版本降级到2.x,并将Spring Cloud降级到相应的版本,那么这就可以工作(我的应用程序启动,spring.datasource.url属性设置为configmap中的值)。
如何在Sping Boot 3中运行?

dw1jzc5e

dw1jzc5e1#

正如Spencer所评论的,您需要在application.yaml中启用“config-data”支持(请参阅此处的文档)。
需要注意的是,虽然我们确实添加了这种支持,但与bootstrap相比,目前它有点有限。例如,您无法读取多个秘密,因此您仍然需要启用bootstrap。

相关问题