如何构建Spring Boot项目以引用K8s部署后创建的外部配置文件?
解决方案
1. 移除硬编码的@PropertySource配置
Maven构建阶段本地不存在集群环境中的/app/config/application.yaml路径,直接用@PropertySource指定该路径必然导致构建失败。Spring Boot默认会自动扫描jar包所在目录下的config文件夹中的配置文件,完全不需要手动通过@PropertySource硬编码路径,直接删除@Configuration类中的该注解即可。
2. 调整Dockerfile的启动参数
在Dockerfile的ENTRYPOINT中添加Spring配置扩展参数,避免覆盖默认配置加载路径:
FROM eclipse-temurin:latest VOLUME /tmp COPY ./target/basicRestApp-0.0.1-SNAPSHOT.jar app/app.jar ENTRYPOINT ["java","-jar","app/app.jar","--spring.config.additional-location=file:/app/config/application.yaml"]
使用--spring.config.additional-location而非--spring.config.location,前者是在默认配置基础上追加外部配置,不会覆盖默认配置的加载逻辑,能避免丢失默认配置中的必要项(比如之前密钥库的配置可能来自默认配置,用location会覆盖导致找不到)。
3. 修复密钥库找不到的问题
错误Could not load store from '/root/rins_common/rins_service_config/rins-keystore'是因为配置文件中指定的密钥库路径在容器内不存在,可通过两种方式解决:
- 将密钥库文件打包进Docker镜像,或者通过K8s Secret挂载到容器内的对应路径
- 修改ConfigMap中
application.yaml的密钥库路径为容器内的实际路径,比如挂载到/app/keystore/rins-keystore,则配置改为:server: ssl: key-store: /app/keystore/rins-keystore # 补充其他ssl相关配置
4. 验证ConfigMap的格式与挂载
确保ConfigMap中的application.yaml内容格式正确(YAML对缩进敏感):
apiVersion: v1 kind: ConfigMap metadata: name: test-config-map namespace: default data: application.yaml: |- key: value # 其他配置项保持正确缩进
同时确认Deployment的volumeMounts配置无误,确保ConfigMap挂载到容器的/app/config路径。
内容的提问来源于stack exchange,提问作者ndubs18
相关产品推荐
相关产品推荐

