web-dev-qa-db-ja.com

Springがコマンドラインからアクティブなプロファイルを上書きしない

これが私のapplication.ymlファイルです:

spring:
  freemarker:
    template-loader-path: classpath:/templates

  datasource:
    url: jdbc:postgresql://localhost:5432/myapp
    username: postgres
    password: password
    driver-class-name: org.postgresql.Driver

  jpa:
    show-sql: true
    properties:
      hibernate:
        enable_lazy_load_no_trans: false
        jdbc:
          lob:
            non_contextual_creation: true
        dialect: org.hibernate.dialect.PostgreSQLDialect
    hibernate:
      ddl-auto: create-drop


---

spring:
  profiles:
    active: development


---

spring:
  profiles: staging

  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update

logging:
  level:
    root: DEBUG

---

spring:
  profiles: production

  jpa:
    show-sql: false
    hibernate:
      ddl-auto: update

私は次を使用してアプリケーションを実行します:

Java -jar application.jar -Dspring.profiles.active=staging

ログで、春のブートが出力されることがわかります:次のプロファイルがアクティブです:開発

では、コマンドライン引数で明示的に設定しているにもかかわらず、アクティブプロファイルがstagingに設定されていないのはなぜですか?

4
conquester

順序は重要です。システムプロパティを設定するには、次を使用します。

Java -jar -Dspring.profiles.active=staging application.jar

あなたが言及した行はアプリケーションの引数を渡します。

9
Andrew Tobilko

a Javaアプリケーションを起動します。コマンドで起動します

Java [ options ] -jar file.jar [ arguments ]

春のプロファイルspring-docs

Spring環境にはこのためのAPIがありますが、通常はシステムプロパティ(spring.profiles.active)またはOS環境変数(SPRING_PROFILES_ACTIVE)を設定します。また、次のように、-D引数を使用してアプリケーションを起動できます(メインクラスまたはjarアーカイブの前に配置することを忘れないでください)。

$ Java -jar -Dspring.profiles.active=production demo-0.0.1-SNAPSHOT.jar

Spring Bootでは、次の例に示すように、application.propertiesでアクティブプロファイルを設定することもできます。

spring.profiles.active=production

Spring.profiles.active環境プロパティを使用して、アクティブにするプロファイルを指定できます。次のスイッチを使用して、コマンドラインで指定することもできます。 spring-docs

$ Java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

複数のプロファイルの場合

$ Java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev,hsqldb
3
Deadpool

jarファイルの前にオプションを指定し、その後に引数を指定する必要があります

Java [-options] -jar jarfile [args...]

-Dspring.profiles.active = stagingはオプションであり、引数ではありません。次のように変更してください

Java -jar -Dspring.profiles.active=staging application.jar
1
mkjh