当前位置: 首页 > 知识库问答 >
问题:

docker compose-外部化spring application.properties

虞高雅
2023-03-14

我有一个spring boot应用程序,它连接到mongo db,并用docker部署了该应用程序。我正在使用这个docker compose。yml文件,工作正常:

version: '2'
services:
  db:
      container_name: app-db
      image: mongo
      volumes:
        - /data/db:/data/db
      ports:
        - 27017:27017
  web:
    container_name: spring-app
    image: spring-app
    depends_on:
      - db
    environment:
      SPRING_DATA_MONGODB_URI: mongodb://db:27017/appDB
      SPRING_DATA_MONGODB_HOST: db
    ports:
      - 8080:8080

目前,该应用程序正在使用嵌入在Spring应用程序docker映像(spring-app)中的application.properties文件。如何使用docker-compose外部化/传递application.properties文件?

谢谢你的帮助

共有2个答案

关玮
2023-03-14

我不确定我是否会回答这个问题,事实上,如果我理解的话。但我的2美分就到了:

Docker撰写:

version: "3.4"

x-common-variables:
  &db-env-vars
    POSTGRES_DB: anime
    POSTGRES_USER: root
    POSTGRES_PASSWORD: root
    PORT_API: 8383

volumes:
  webflux_data:

networks:
  webflux_rede:

services:
  db-compose:
    container_name: db-postgres
    image: postgres:9.5-alpine
    hostname: postgres # postgres hostname
    restart: always
    ports:
      - 5432:5432
    volumes:
      - webflux_data:/var/lib/postgresql/data
    networks:
      - webflux_rede
    environment:
      *db-env-vars

web-api:
    image: pauloportfolio/web-api
    build:
      context: ./
      dockerfile: ./dev-dockerfile
      args:
        JAR_FILE: target/spring-webflux-essentials-0.0.1-SNAPSHOT.jar
    ports:
      - 8383:8383
      - 5005:5005
    volumes:
      - webflux_data:/var/lib/postgresql/data
    depends_on:
      - db-compose
    networks:
      - webflux_rede
    environment:
      DB_URL: r2dbc:pool:postgresql://db-compose:${PORT_DB}/${POSTGRES_DB}
      <<: *db-env-vars
      PROFILE: dev
      DEBUG_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Xmx1G -Xms128m -XX:MaxMetaspaceSize=128m
      

我的application-dev.properties

server.port=${PORT_API}

# DB-VERSION-MIGRATION
r2dbc.migrate.resources-path=classpath:/db/migration/postgresql/*.sql
r2dbc.migrate.dialect=postgresql

# POSTGRES-R2DBC - RODA COM COMPOSE
spring.r2dbc.url=${DB_URL}
spring.r2dbc.name=${POSTGRES_DB}
spring.r2dbc.username=${POSTGRES_USER}
spring.r2dbc.password=${POSTGRES_PASSWORD}
spring.r2dbc.pool.validation-query=SELECT 1

对我来说,工作完全良好和稳定。

尉迟京
2023-03-14

您必须根据您的需求使用Spring配置文件来定义环境变量。

server:
    port: 9000
---

spring:
    profiles: development
server:
    port: 9001

---

spring:
    profiles: production
server:
    port: 0

参考:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-根据环境更改配置

您可以定义在运行时需要获取哪个配置文件。

version: '2'
services:
  db:
      container_name: app-db
      image: mongo
      volumes:
        - /data/db:/data/db
      ports:
        - 27017:27017
  web:
    container_name: spring-app
    image: spring-app
    depends_on:
      - db
    environment:
      SPRING_DATA_MONGODB_URI: mongodb://db:27017/appDB
      SPRING_DATA_MONGODB_HOST: db
      SPRING_PROFILES_ACTIVE=development
    ports:
      - 8080:8080

但是,如果配置发生不理想的更改,则需要重建docker映像。Spring云配置(Vault)很方便,它可以帮助您将配置外部化。

http://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.3.0.RELEASE/

 类似资料:
  • 在springboot应用程序中,我有一个jar,然后是一个子目录config with application。属性,applicationContext。xml和log4j。。。属性文件。 我正在尝试外部化log4j配置。application.properties是这样外部化的。 但是,当springboot运行时,它使用jar文件中的log4j配置文件。通过使用-Dlog4j.debug选

  • 和以下依赖项: 现在伐木对我来说很好。但现在我正在尝试将文件移到war文件之外,这样就不必更改war文件来更改日志级别。我试图将文件移动到。我找不到指定文件路径的方法,该路径将是${catalina.base}/conf/logback.xml。我发现了一些类似的问题,但我可以找到一个可以使用的解决方案:使用application.properties和logback Externalizatio

  • 我知道有很多关于这个的线程,但还没有一个解决我的问题。我有一个在Eclipse中运行的Spring Boot应用程序,我将参数外部化,以便部署到外部Tomcat并使属性远离战争。我将application.properties从src/main/Resources移至APP_ROOT/config。在catalina.sh,我添加了这个: 外部构建工作正常;然而,现在它不再从日食开始。我通过在启动

  • 我想外部化的选项,有一个可重用的类或注释,我可以扔在排除任何数据库/Hibernate初始化。 因此,与其写: 我想创建一个注释,我可以应用到我的主类: 然后通过注释启用此功能: 问题:注释方法不起作用,Spring仍然尝试加载数据库。为什么啊? 我的最终目标是拥有多个配置文件,其中只有一个加载数据库。

  • 我正在开发一个由几个包组成的OSGi程序,我有时在本地windows dev计算机上运行,有时在经典的Linux上运行。目前,几个专用于资源连接的bundle都有自己的配置文件(属性文件),其中包含一些信息,比如访问一些重要文件的路径(在两个环境中都有)。 但是,由于两个执行环境中的路径不同,我必须在编译之前手动更改配置,这取决于我要在哪个环境中运行我的程序。

  • 我在两个问题上需要你的帮助: 我怎样才能使这两个特性得到满足呢? 感谢您的帮助:)