我有一个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美分就到了:
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
对我来说,工作完全良好和稳定。
您必须根据您的需求使用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都有自己的配置文件(属性文件),其中包含一些信息,比如访问一些重要文件的路径(在两个环境中都有)。 但是,由于两个执行环境中的路径不同,我必须在编译之前手动更改配置,这取决于我要在哪个环境中运行我的程序。
我在两个问题上需要你的帮助: 我怎样才能使这两个特性得到满足呢? 感谢您的帮助:)