しおしお

IntelliJ IDEAのことなんかを書いてます

Spring Boot2.4.0からのapplication.properties(yml)の変更点φ(..)メモメモ

Spring Boot Config Data Migration Guide · spring-projects/spring-boot Wiki · GitHubにまとまっていますが、2.4.0からConfigファイル周りの設定値や読み込み順などが変わっているようです。

2.4.0より前のバージョン

こんな感じにspring.profilesでプロファイル名を指定して、そのプロファイルがアクティブなときの設定値を書いていきます。

app:
  key1:default
---
spring:
  profiles: prod
app:
  key1: prod
---
spring:
  profiles: dev
app:
  key1: dev

複数プロファイルがアクティブな場合の適用順

アクティブなプロファイルが1つだけの場合は、問題ありませんが複数指定した場合は後勝ちで適用されます。

prod,devと指定した場合

2020-11-17 09:13:18.126  INFO 33098 --- [           main] siosio.boot240.Boot240ApplicationKt      : The following profiles are active: prod,dev
2020-11-17 09:13:18.606  INFO 33098 --- [           main] siosio.boot240.Boot240ApplicationKt      : Started Boot240ApplicationKt in 0.736 seconds (JVM running for 1.231)
props = Props(key1=dev)

dev,prodと指定した場合

2020-11-17 09:21:17.252  INFO 34864 --- [           main] siosio.boot240.Boot240ApplicationKt      : The following profiles are active: dev,prod
2020-11-17 09:21:17.856  INFO 34864 --- [           main] siosio.boot240.Boot240ApplicationKt      : Started Boot240ApplicationKt in 0.845 seconds (JVM running for 1.31)
props = Props(key1=prod)

2.4.0以降のバージョン

spring.config.activate.on-profileでプロファイル名を指定して、そのプロファイルがアクティブなときの設定値を書いていきます。 spring.profilesは非推奨になっているので、IntelliJ IDEAの場合そのキー非推奨だよと親切に教えてくれます。

---
spring:
  config:
    activate:
      on-profile: prod
app:
  key1: prod
---
spring:
  config:
    activate:
      on-profile: dev
app:
  key1: dev

複数プロファイルがアクティブな場合の適用順

複数指定した場合でも、設定値の記述順がより下のものが優先されます。上の設定ファイルの場合、常にdevが優先されることになります。

prod,devと指定した場合

2020-11-17 09:31:10.295  INFO 36947 --- [           main] siosio.boot240.Boot240ApplicationKt      : The following profiles are active: prod,dev
2020-11-17 09:31:10.781  INFO 36947 --- [           main] siosio.boot240.Boot240ApplicationKt      : Started Boot240ApplicationKt in 0.741 seconds (JVM running for 1.158)
props = Props(key1=dev)

dev,prodと指定した場合

2020-11-17 09:31:39.106  INFO 37082 --- [           main] siosio.boot240.Boot240ApplicationKt      : The following profiles are active: dev,prod
2020-11-17 09:31:39.557  INFO 37082 --- [           main] siosio.boot240.Boot240ApplicationKt      : Started Boot240ApplicationKt in 0.687 seconds (JVM running for 1.157)
props = Props(key1=dev)

2.4.0より前の動きで動作させたい場合

spring.config.use-legacy-processing=true設定値や起動時のシステムプロパティなどで指定することで、古いバージョンと全く同じ動きとなります。