使用 Spring Boot 2 的 Docker 堆栈“配置”

Posted

技术标签:

【中文标题】使用 Spring Boot 2 的 Docker 堆栈“配置”【英文标题】:Docker Stack "configs" with Spring Boot 2 【发布时间】:2018-12-30 07:12:52 【问题描述】:

我认为这是一个相当简单的问题,但是我没有看到太多示例或任何解释使用 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 中。这必须足够简单..大声笑。谢谢!

【问题讨论】:

好的,我刚刚想出了如何将配置移植到 spring 中,一旦我测试它会在几个小时内发布答案,如果有人可以在我之前发布答案,我会把功劳归功于那个人..; ) 我和@PropertySource 混在一起是我的坏事。我的回答确实不相关。我想我没有完全理解你的意思。如果答案很好,请给你好评! :) 【参考方案1】:

抱歉延迟回复这个问题,或者至少发布解决方案......

需要更多地研究配置如何与 docker 一起工作,但事实证明,您需要为 swarm 集群中的“配置”条目中保存的“配置”指定一个目标,然后将其映射到您的容器,并作为外部配置加载到您的 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"]

这使我可以访问配置条目,这些条目在我的 spring 应用程序外部加载,带有 @Value 和 @ConfigurationProperties 注释。

【讨论】:

以上是关于使用 Spring Boot 2 的 Docker 堆栈“配置”的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2.0:使用 Docker 部署 Spring Boot

Spring Boot 2.0:Docker Compose + Spring Boot +

使用 Docker 构建部署运行Spring Boot应用 《Spring Boot 2.0 极简教程》

Spring Boot 2.0:使用 Docker 部署 Spring Boot 开源软件云收

Spring Boot 2.0:Docker Compose + Spring Boot + Nginx + Mysql 实践

使用 Spring Boot 2 的 Docker 堆栈“配置”