私は春のブートアプリに取り組んでいます。各環境 (dev、int、qa、prd など) のプロパティ ファイルがあります。Bean に関しては、生産用に別の方法で作成する必要があるものもあります。したがって、次の構成があります。
@Configuration
class MyBeans {
@Bean(name="someBean")
@Profile("prd")
MyBean someBeanProd() {
...
}
@Bean(name="someBean")
MyBean someBeanDev() {
...
}
}
MyBean は次のように自動配線されます。
@Component
public class SomeService
{
@Autowired
private MyBean someBean;
}
アプリケーションを次のように起動する場合:
-Dspring.profiles.active=prd
「someBeanProd」メソッドが呼び出され (予想どおり)、関連するプロパティ ファイルが読み込まれています (application-prd.properties)。他のプロファイルでは、「someBeanDev」が呼び出され (予想どおり)、関連するプロパティ ファイルが読み込まれます。
ただし、構成内のメソッドの順序を次のように変更すると、「someBeanDev」メソッドが常に呼び出されますが (アクティブなプロファイルが prd の場合でも)、正しいプロパティ ファイルが使用されています。
@Configuration
class MyBeans {
@Bean(name="someBean")
MyBean someBeanDev() {
...
}
@Bean(name="someBean")
@Profile("prd")
MyBean someBeanProd() {
...
}
}
これは正しい/予期される動作ですか? 構成ファイル内のメソッドの順序に関係なく、Spring が正しい Bean を作成することを期待していました。
あるプロファイルの Bean を定義する方法はありますか?他のプロファイルは「デフォルト」プロファイルにフォールバックする必要がありますか?
別の Java 構成クラスで prd Bean を作成しても機能しません。