Spring 来自 docker 环境的应用程序属性(地图)
Spring application properties (map) from docker environment
我想使用 Docker 环境配置我的 docker 化 spring 启动应用程序。 属性 是一张地图,我在 application.yml 中配置它,如下所示。
spring:
kafka:
producer:
properties:
"schema.registry.url": http://schema-registry.com:8081
我尝试了以下方法,但没有用,
environment:
- SPRING_KAFKA_PRODUCER_PROPERTIES_SCHEMA.REGISTRY.URL=http://schema-registry.com:8081
如何从 docker 环境配置这个 schema.registry.url
参数?
嗯,首先,我需要更多关于您如何使用该容器化应用程序的信息:您使用 docker-compose
部署它吗?它是否构成 Docker 群的一部分?
根据这一点,可能的解决方案可能会有所不同。
Docker群
例如,如果您使用 Docker Swarm,您可以将 application.yml 定义为模板:
application.yml.template
spring:
kafka:
producer:
properties:
"schema.registry.url": {{ env "schema_registry" }}
然后,您将不得不解析该模板。为此,我假设您已经在容器中的 /usr/app 下找到了 Spring Boot 可执行文件 JAR,并且您的映像被命名为 springboot-应用.
docker-compose.yml
version: "3.8"
services:
springboot-app:
image: springboot-app:latest
environment:
SPRING_KAFKA_PRODUCER_PROPERTIES_SCHEMA.REGISTRY.URL: 'http://schema-registry.com:8081'
configs:
- source: springboot-app.application.yml
target: /usr/app/config/application.yaml
mode: 0440
configs:
springboot-app.application.yml:
template_driver: golang
file: ./application.yml.template
因此您现在可以使用 docker stack deploy -c docker-compose.yml springboot-app
.
部署您的 Swarm
或者更好的是,如果你在生产环境中工作,你可以将环境变量与通用配置分开:
docker-compose.yml
version: "3.8"
services:
springboot-app:
image: springboot-app:latest
configs:
- source: springboot-app.application.yml
target: /usr/app/config/application.yaml
mode: 0440
configs:
springboot-app.application.yml:
template_driver: golang
file: ./application.yml.template
docker-compose.dev.yml
version: "3.8"
services:
springboot-app:
environment:
SPRING_KAFKA_PRODUCER_PROPERTIES_SCHEMA.REGISTRY.URL: 'http://schema-registry.com:8081'
并将其部署为 docker stack deploy -c docker-compose.yml -c docker-compose.dev.yml springboot-app
。
Docker撰写
由于您在最近的评论中提到您正在使用 docker-compose
,因此使用方式有所不同。
首先,并不是 Spring 中的所有属性都可以在 Docker Compose 文件中被覆盖,只有那些你可以在构建或启动应用程序时传递给 Maven 的属性.
此外,您似乎错误地定义了环境 属性,因为通常您提供的所有环境都应该更改点“.”。通过下划线'_',但无论如何,由于通常 Kafka Producer 的配置不仅仅是定义 URL,我会使用 Spring.
的配置文件功能
您可以使用所需的配置组合创建多个配置文件,并通过 Compose 告知 Spring 您要使用哪一个。让我们看一个例子。
application.yml
spring:
config:
activate:
on-profile: "development"
kafka:
producer:
properties:
"schema.registry.url": https://kafka-dev-endpoint.com
---
spring:
config:
activate:
on-profile: "production"
kafka:
producer:
properties:
"schema.registry.url": https://kafka-prod-endpoint.com
然后最后:
docker-compose.yml
environment:
- SPRING_PROFILES_ACTIVE=development
如果您想进一步查看,您可以在此处获得更多相关信息:https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-set-active-spring-profiles
我想使用 Docker 环境配置我的 docker 化 spring 启动应用程序。 属性 是一张地图,我在 application.yml 中配置它,如下所示。
spring:
kafka:
producer:
properties:
"schema.registry.url": http://schema-registry.com:8081
我尝试了以下方法,但没有用,
environment:
- SPRING_KAFKA_PRODUCER_PROPERTIES_SCHEMA.REGISTRY.URL=http://schema-registry.com:8081
如何从 docker 环境配置这个 schema.registry.url
参数?
嗯,首先,我需要更多关于您如何使用该容器化应用程序的信息:您使用 docker-compose
部署它吗?它是否构成 Docker 群的一部分?
根据这一点,可能的解决方案可能会有所不同。
Docker群
例如,如果您使用 Docker Swarm,您可以将 application.yml 定义为模板:
application.yml.template
spring:
kafka:
producer:
properties:
"schema.registry.url": {{ env "schema_registry" }}
然后,您将不得不解析该模板。为此,我假设您已经在容器中的 /usr/app 下找到了 Spring Boot 可执行文件 JAR,并且您的映像被命名为 springboot-应用.
docker-compose.yml
version: "3.8"
services:
springboot-app:
image: springboot-app:latest
environment:
SPRING_KAFKA_PRODUCER_PROPERTIES_SCHEMA.REGISTRY.URL: 'http://schema-registry.com:8081'
configs:
- source: springboot-app.application.yml
target: /usr/app/config/application.yaml
mode: 0440
configs:
springboot-app.application.yml:
template_driver: golang
file: ./application.yml.template
因此您现在可以使用 docker stack deploy -c docker-compose.yml springboot-app
.
或者更好的是,如果你在生产环境中工作,你可以将环境变量与通用配置分开:
docker-compose.yml
version: "3.8"
services:
springboot-app:
image: springboot-app:latest
configs:
- source: springboot-app.application.yml
target: /usr/app/config/application.yaml
mode: 0440
configs:
springboot-app.application.yml:
template_driver: golang
file: ./application.yml.template
docker-compose.dev.yml
version: "3.8"
services:
springboot-app:
environment:
SPRING_KAFKA_PRODUCER_PROPERTIES_SCHEMA.REGISTRY.URL: 'http://schema-registry.com:8081'
并将其部署为 docker stack deploy -c docker-compose.yml -c docker-compose.dev.yml springboot-app
。
Docker撰写
由于您在最近的评论中提到您正在使用 docker-compose
,因此使用方式有所不同。
首先,并不是 Spring 中的所有属性都可以在 Docker Compose 文件中被覆盖,只有那些你可以在构建或启动应用程序时传递给 Maven 的属性.
此外,您似乎错误地定义了环境 属性,因为通常您提供的所有环境都应该更改点“.”。通过下划线'_',但无论如何,由于通常 Kafka Producer 的配置不仅仅是定义 URL,我会使用 Spring.
的配置文件功能您可以使用所需的配置组合创建多个配置文件,并通过 Compose 告知 Spring 您要使用哪一个。让我们看一个例子。
application.yml
spring:
config:
activate:
on-profile: "development"
kafka:
producer:
properties:
"schema.registry.url": https://kafka-dev-endpoint.com
---
spring:
config:
activate:
on-profile: "production"
kafka:
producer:
properties:
"schema.registry.url": https://kafka-prod-endpoint.com
然后最后:
docker-compose.yml
environment:
- SPRING_PROFILES_ACTIVE=development
如果您想进一步查看,您可以在此处获得更多相关信息:https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-set-active-spring-profiles