我有多個春天開機起動器,每個這樣定義一個數據源:排除啓動庫中的DataSource從自動配置
@Bean
@ConfigurationProperties(prefix = "some.unique.namespace.datasource")
public DataSource someUniqueNamespaceDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SomeOtherBean someOtherBean() {
return new SomeOtherBean(someUniqueNamespaceDataSource())
}
正如你所看到的,bean方法someUniqueNamespaceDataSource()
被直接調用另一個bean方法,在相同的配置類中。但是,Spring Boot正在攔截該方法,然後執行自己的內部注入。這一次,它注入了一種數據源。
當一個應用程序使用其中一個啓動器時,它的工作原理沒有問題。然而,當使用多個首先,我得到的錯誤是這樣的:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2: someUniqueNamespaceDataSource,someOtherUniqueNamespaceDataSource
我相信這是因爲春季啓動在內部被注入型,即使我的代碼注入合格的豆。
有什麼方法可以讓初學者庫指出DataSources不應該被認爲是自動配置的候選對象?
是否有某種方式取決於多個這些入門庫的應用程序可以將它們從自動配置中排除?
完全禁用自動配置實際上並不可行。此外,手動排除觸發存在DataSource bean的所有當前自動配置太脆弱,因爲稍後添加依賴關係,特別是基於DataSource bean觸發的傳遞依賴關係,將重新引入錯誤。
但你怎麼自動裝配數據源? – Strelok