spring - 使用 Spring Boot 2 的 Docker 堆栈“配置”
问题描述
我认为这是一个相当简单的问题,但是我没有看到太多示例或任何解释使用 docker configs (v 3.3+) 和将该配置加载到 Spring Boot 中以供参考之间的联系。
示例 docker-stack.yml
version: '3.3'
services:
test-service:
image: myrepo/test-service:1.0.0
configs:
- service-config
networks:
- test-network
configs:
service-config:
external:true
networks:
test-network:
样本群“服务配置”。
我在 Portainer 中将其作为新的“配置”条目输入。
services:
test-service:
key1: sample value
key2: sample two
我正在尝试将这个配置加载到 Spring 中,这样我就可以在组件中引用来自这个配置的值。
通过@ConfigurationProperties
@ConfigurationProperties("services.test-service")
public MyBeanName myBean() { return new MyBeanName(); }
或通过@Value:
@Value("${services.test-service.key1}")
private String key1;
如何将此 docker“configs”配置加载到 Spring 中。这必须足够简单..大声笑。谢谢!
解决方案
很抱歉延迟回答这个问题,或者至少发布解决方案......
需要更多地研究配置如何与 docker 一起工作,但是事实证明,您需要为 swarm 集群中的“configs”条目中保存的“config”指定一个目标,然后将其映射到您的容器中,然后作为外部配置加载到您的 spring 应用程序。就我而言,我不想在我的 Spring Boot 应用程序中覆盖 application.yml,只想获取额外的配置。所以我选择了以下设置:
--spring.config.additional-location=file:/configs/sample-config.yml
假设我创建了一个名为“sample-config”并具有以下数据的 docker configs 条目:
Configs Entry => "sample-config"
services:
test-service:
key1: sample value
key2: sample two
然后在我的 compose/stack 文件上,我需要引用“configs”条目,并提供一个与我在“spring.config.additional-location”设置中指定的文件相对应的目标文件。
version: '3.3'
services:
test-service:
image: myrepo/test-service:1.0.0
configs:
- source: sample-config
target: /configs/sample-config.yml
networks:
- test-network
configs:
sample-config:
external:true
networks:
test-network:
然后,在我的 Dockerfile 中,我将指定以下内容以在启动 jar/app 时实质上加载“sample-config”配置条目:
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar", "--spring.config.additional-location=file:/configs/sample-config.yml"]
这使我可以使用 @Value 和 @ConfigurationProperties 注释访问从外部加载到我的 spring 应用程序的配置条目。
推荐阅读
- laravel - Symlink 通过部署脚本在 Laravel Envoyer 中上传文件夹
- c# - 如何取消选择表单中的所有控件?
- automator - 如何在 Mojave 中修复 Automator 日期时间脚本
- angularjs - 如何使用 ng-repeat 获取 ckeditor 的实例?
- amp-html - 注册墙导致 AMP 验证问题
- python-3.x - python中的IP地址短列表
- c - C:在 1970 年之前的日期中添加天数,与操作系统无关
- java - Jersey FormDataBodyPart getValueAs 导致“实体实例不包含未转换的内容”。
- mongodb - 如何为 MongoDB 接收器的 Spark Structured Streaming 应用程序构建 uber jar
- c++ - 与 QProcess 和 VS C++ 进行实时通信时遇到问题