web-dev-qa-db-ja.com

bootstrapファイル(Spring Bootが異なるCloud Config Serverをターゲットにするため)で)異なるSpringプロファイルをどのように適切に設定しますか?

環境ごとに異なる構成サーバーがあります。各スプリングブートアプリケーションは、対応する構成サーバーをターゲットにする必要があります。私は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がロードされます)が、適切な構成サーバーからプルされていません。

14
dev_feed

1つのファイルで異なるプロファイルを指定すると、YAMLファイルのみがサポートされ、プロパティファイルには適用されません。プロパティファイルの場合、環境固有のbootstrap-[profile].propertiesを指定して、デフォルトのbootstrap.propertiesからプロパティを上書きします。

したがって、あなたの場合、4つのファイルbootstrap.propertiesbootstrap-prod.propertiesbootstrap-stage.propertiesおよびbootstrap-dev.propertiesを取得します。

ただし、代わりにデフォルトのbootstrap.propertiesのみを指定し、アプリケーションの起動時に-Dspring.cloud.config.uri=<desired-uri>をアプリケーションに渡すことでプロパティをオーバーライドすることもできます。

Java -jar <your-app>.jar -Dspring.cloud.config.uri=<desired-url>

これは、デフォルトの設定値よりも優先されます。

18
M. Deinum
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
5
jeton