src/main/resources に application.properties があって、プロジェクト直下に config/application-env.properties があるとする。このとき、両方のプロパティファイルを読み込むことを検証したい。
プロパティファイルの内容は次の通り。
- src/main/resources/application.properties
app.foo=foofoo app.bar=barbar
- config/application-env.properties
env.hoge=hogehoge env.fuga=fugafuga
それぞれのプロパティファイルに対応する Bean を用意する。
- application.properties に対応する Bean
@Component @ConfigurationProperties(prefix = "app") public class ApplicationProperties { private String foo; private String bar; // getter/setter は省略 }
- application-env.properties に対応する Bean
@Component @ConfigurationProperties(prefix = "env") public class ApplicationEnvProperties { private String hoge; private String fuga; // getter/setter は省略 }
プロパティを使うときは、それぞれの Bean を DI して使う。
@Autowired private ApplicationProperties appProp; @Autowired private ApplicationEnvProperties envProp; ... appProp.getFoo()); // foofoo appProp.getBar()); // barbar envProp.getHoge()); // hogehoge envProp.getFuga()); // fugafuga
尚、application-env.properties を読み込むには、アプリケーションの実行時に -Dspring.config.location=config/application-env.properties
を VM 引数に渡す必要がある。
まとめ
VM 引数に -Dspring.config.location=config/application-env.properties
を指定した場合、application-env.properties しか読み込まれないかと思っていたら、クラスパス上にある application.properties も普通に読み込まれていたので、特に深く考える必要はなかった模様...。