没有主数据源的Spring多数据源
我有一个问题,我需要创建两个没有主数据源的Spring多数据源,spring,dependency-injection,datasource,autowired,Spring,Dependency Injection,Datasource,Autowired,我有一个问题,我需要创建两个数据源,但我不能使用@Primary,因为在其他模块中,我也有两个数据源,然后在第三个模块中,我包括两个模块,因此有两个主要模块 我想使用@Qualifier,但它不起作用 @Bean(name = "secondDataSourceProperties") @ConfigurationProperties("second") public DataSourceProperties secondDataSourceProperties() { return n
数据源
,但我不能使用@Primary
,因为在其他模块中,我也有两个数据源
,然后在第三个模块中,我包括两个模块,因此有两个主要模块
我想使用@Qualifier
,但它不起作用
@Bean(name = "secondDataSourceProperties")
@ConfigurationProperties("second")
public DataSourceProperties secondDataSourceProperties() {
return new DataSourceProperties();
}
@Bean(name = "secondDataSource")
@ConfigurationProperties("second.configuration")
public DataSource secondDataSource(@Qualifier("secondDataSourceProperties") DataSourceProperties dataSourceProperties) {
HikariDataSource ds = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
ds.setConnectionTestQuery("SELECT 1");
ds.setConnectionInitSql("SELECT 1");
ds.setPoolName("jdbc/second");
return ds;
}
@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager secondDataSourceTransactionManager(@Qualifier("secondDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
@ConfigurationProperties("first")
public DataSourceProperties firstDataSourceProperties() {
return new DataSourceProperties();
}
@Bean(name = "firstDataSource")
@ConfigurationProperties("first.configuration")
public DataSource firstDataSource(@Qualifier("firstDataSourceProperties") DataSourceProperties dataSourceProperties) {
HikariDataSource ds = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
ds.setConnectionTestQuery("SELECT 1");
ds.setConnectionInitSql("SELECT 1");
ds.setPoolName("jdbc/first");
return ds;
}
@Bean(name = "firstTransactionManager")
public DataSourceTransactionManager firstDataSourceTransactionManager(@Qualifier("firstDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
我得到的错误是:
没有类型为的限定bean
'org.springframework.boot.autoconfigure.jdbc.DataSourceProperties'
可用:需要单个匹配bean,但找到5个:
secondDataSourceProperties、firstDataSourceProperties、3DataSourceProperties、4DataSourceProperties、spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties
我使用的DataSource
与代码中的类似:
@Autowired
@Qualifier("first")
private DataSource dataSource;
及
做下面的事情怎么样?没有
@限定符
混乱?@Bean
的方法名默认用作Bean的“限定符”
@Bean
@ConfigurationProperties("first")
public DataSourceProperties firstDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("second")
public DataSourceProperties secondDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
public DataSource firstDataSource(DataSourceProperties firstDataSourceProperties) {
HikariDataSource ds = firstDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
ds.setConnectionTestQuery("SELECT 1");
ds.setConnectionInitSql("SELECT 1");
ds.setPoolName("jdbc/first");
return ds;
}
@Bean
public DataSource secondDataSource(DataSourceProperties secondDataSourceProperties) {
HikariDataSource ds = secondDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
ds.setConnectionTestQuery("SELECT 1");
ds.setConnectionInitSql("SELECT 1");
ds.setPoolName("jdbc/second");
return ds;
}
@Bean
public DataSourceTransactionManager firstTransactionManager(DataSource firstDataSource) {
return new DataSourceTransactionManager(firstDataSource);
}
@Bean
public DataSourceTransactionManager secondTransactionManager(DataSource secondDataSource) {
return new DataSourceTransactionManager(secondDataSource);
}
只能使用此名称自动连线
@Autowire
private DataSource firstDateSource;
及
帮助添加
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
或者如果您使用@SpringBootApplication
@SpringBootApplication(scanBasePackages={"a.b.c"}, exclude = {DataSourceAutoConfiguration.class})
仍在获取由以下原因引起的错误
:org.springframework.beans.factory.nonuniquebeandDefinitionException:没有类型为“org.springframework.boot.autoconfigure.jdbc.DataSourceProperties”的合格bean可用:预期为单个匹配bean,但找到了5:
仅使用方法调用HikariDataSource ds=firstDataSourceProperties()…
而不是将DataSourceProperty作为方法参数传递,这意味着解决了问题?我以为命名会解决重复bean的问题。。。我在同一个配置文件中有10个属性bean,都是独立使用的,只是不同的命名就足够了。请让我知道你的反馈,只添加一个排除就解决了这个问题?如果您不需要这些bean,为什么要在项目中包含它们呢?
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@SpringBootApplication(scanBasePackages={"a.b.c"}, exclude = {DataSourceAutoConfiguration.class})