我认为这是一个相当简单的问题,但是我没有看到太多示例或任何真正的东西来解释使用docker configs(v 3.3+)和将该配置加载到Spring Boot以供参考之间的联系。
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中将此输入为新的“ configs”条目。
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中。这必须足够简单..大声笑。谢谢!
答案 0 :(得分:1)
很抱歉延迟回答此问题,或至少发布解决方案...
花了更多的时间来研究配置如何与docker一起工作,但是事实证明,您需要为swarm集群中“ configs”条目中保存的“ config”指定目标,然后将其映射到您的容器,并作为外部配置加载到您的Spring应用程序。就我而言,我不想在我的Spring Boot应用程序中覆盖application.yml,只想选择其他配置。所以我选择了设置:
--spring.config.additional-location=file:/configs/sample-config.yml
可以说我创建了一个名为“ sample-config”并具有以下数据的泊坞窗配置条目:
Configs Entry => "sample-config"
services:
test-service:
key1: sample value
key2: sample two
然后在我的撰写/堆栈文件中,我需要引用“ 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应用程序中的配置条目。