Эта проблема, которая заключается в том, что более чем один «основной» компонент обнаруживается среди кандидатов », всегда возникает, когда я настраиваю mybatis несколько источников данных в Springboot.
источники основных данных настроены следующим образом:
@Configuration
@MapperScan(basePackages = "com.monkey.myproject.dao.first", sqlSessionTemplateRef = "sqlSessionTemplate1")
public class DataSourceConfig1 {
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource.first")
@Primary
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactory1")
@Primary
public SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource1") DataSource dataSource1) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource1);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/first/*.xml"));
return bean.getObject();
}
@Bean(name = "transactionManager1")
@Primary
public DataSourceTransactionManager transactionManager1(@Qualifier("dataSource1") DataSource dataSource1) {
return new DataSourceTransactionManager(dataSource1);
}
@Bean(name = "sqlSessionTemplate1")
@Primary
public SqlSessionTemplate sqlSessionTemplate1(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory1)
throws Exception {
return new SqlSessionTemplate(sqlSessionFactory1);
}
}
подчиненные источники данных настроены следующим образом:
@Configuration
@MapperScan(basePackages = "com.monkey.myproject.dao.second", sqlSessionTemplateRef = "sqlSessionTemplate2")
public class DataSourceConfig2 {
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactory2")
public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource2") DataSource dataSource2) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource2);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/second/*.xml"));
return bean.getObject();
}
@Bean(name = "transactionManager2")
public DataSourceTransactionManager transactionManager2(@Qualifier("dataSource2") DataSource dataSource2) {
return new DataSourceTransactionManager(dataSource2);
}
@Bean(name = "sqlSessionTemplate2")
public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory2)
throws Exception {
return new SqlSessionTemplate(sqlSessionFactory2);
}
}
Испытание Junit выглядит следующим образом:
@Autowired
@Qualifier("sqlSessionTemplate1")
private SqlSessionTemplate sqlSessionTemplate1;
@Test
public void test2() {
try {
sqlSessionTemplate1.insert("FirstMapper.insertOne", null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Когда этот тест выполняется, появляется сообщение об исключении, следующее:
more than one 'primary' bean found among candidates: [primaryDataSource, secondaryDataSource, dataSource1, dataSource2]
примечание. Когда я удаляю эту аннотацию '@Primary' из master, этот тестовый пример проходит. Но вот почему? Пожалуйста, помогите мне, спасибо заранее.