我有多个春天开机起动器,每个这样定义一个数据源:排除启动库中的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