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
設定値や起動時のシステムプロパティなどで指定することで、古いバージョンと全く同じ動きとなります。