環境ごとに異なる構成サーバーがあります。各スプリングブートアプリケーションは、対応する構成サーバーをターゲットにする必要があります。私はbootstrap.propertiesファイルでプロファイルを設定することでこれを達成しようとしました、例えば:
spring.application.name=app-name
spring.cloud.config.uri=http://default-config-server.com
---
spring.profiles=dev
spring.cloud.config.uri=http://dev-config-server.com
---
spring.profiles=stage
spring.cloud.config.uri=http://stage-config-server.com
---
spring.profiles=prod
spring.cloud.config.uri=http://prod-config-server.com
そして、cla -Dspring.profiles.active=dev
ただし、読み込まれる設定サーバーは常にファイル内の最後のセットです(つまり、上記の設定でprod設定サーバーが読み込まれ、次にprodが削除されるとステージが読み込まれます)。
クラウド構成サーバーのbootstrapプロファイルを設定することは可能ですか?私は この例 に従いましたが、それを機能させることができないようです。正しい構成をロードするためにうまく機能します(つまり、開発プロファイルがアクティブな場合はapp-name-dev.propertiesがロードされます)が、適切な構成サーバーからプルされていません。
1つのファイルで異なるプロファイルを指定すると、YAMLファイルのみがサポートされ、プロパティファイルには適用されません。プロパティファイルの場合、環境固有のbootstrap-[profile].properties
を指定して、デフォルトのbootstrap.properties
からプロパティを上書きします。
したがって、あなたの場合、4つのファイルbootstrap.properties
、bootstrap-prod.properties
、bootstrap-stage.properties
およびbootstrap-dev.properties
を取得します。
ただし、代わりにデフォルトのbootstrap.properties
のみを指定し、アプリケーションの起動時に-Dspring.cloud.config.uri=<desired-uri>
をアプリケーションに渡すことでプロパティをオーバーライドすることもできます。
Java -jar <your-app>.jar -Dspring.cloud.config.uri=<desired-url>
これは、デフォルトの設定値よりも優先されます。
I solved a similar problem with an environment variable in Docker.
bootstrap.yml
spring:
application:
name: dummy_service
cloud:
config:
uri: ${CONFIG_SERVER_URL:http://localhost:8888/}
enabled: true
profiles:
active: ${SPR_PROFILE:dev}
Dockerfile
ENV CONFIG_SERVER_URL=""
ENV SPR_PROFILE=""
Docker-compose.yml
version: '3'
services:
dummy:
image: xxx/xxx:latest
restart: always
environment:
- SPR_PROFILE=docker
- CONFIG_SERVER_URL=http://configserver:8888/
ports:
- 8080:8080
depends_on:
- postgres
- configserver
- discovery