spring - 带有Spring Boot 2的Docker Stack “configs”

标签 spring docker spring-boot docker-compose docker-swarm

我认为这是一个相当简单的问题,但是我没有看到太多示例或任何真正的例子来解释使用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:

样本群“service-config”。

我在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中。这必须足够简单..大声笑。谢谢!

最佳答案

很抱歉延迟回答此问题,或至少发布解决方案...

深入研究了configs与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

然后,在我的撰写/堆栈文件中,我需要引用“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应用程序中的配置条目。

关于spring - 带有Spring Boot 2的Docker Stack “configs”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51468542/

相关文章:

java - 通过注释而不是 XML 配置 Spring LdapTemplate 的最佳实践?

java - 使用 Spring boot 在 thymeleaf 模板中打印数据时出现问题

java - 在状态机之间传输对象

java - Spring Boot中Express服务器和嵌入式服务器的区别

java - Spring @Configuration 运行时注入(inject)

python - 将 postgres 作为 Docker 服务运行时为 "psql: fe_sendauth: no password supplied"

java - spring版本测试初始化​​VM时出错

java - 从控制台启动并重新连接到 spring bean

ruby-on-rails - 连接在docker-compose上分别运行的两个应用程序

docker - 镜像注册表在 docker 中如何工作?