我正尝试使用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中运行?
1条答案
按热度按时间dw1jzc5e1#
正如Spencer所评论的,您需要在
application.yaml
中启用“config-data”支持(请参阅此处的文档)。需要注意的是,虽然我们确实添加了这种支持,但与bootstrap相比,目前它有点有限。例如,您无法读取多个秘密,因此您仍然需要启用bootstrap。