我有3个DataSource bean
<bean id="dataSource1" name="dataSource1" autowire="byName" .....>
<bean id="dataSource2" name="dataSource2" autowire="byName" .....>
<bean id="dataSource3" name="dataSource3" autowire="byName" .....>
我在xml
中的bean中设置了autowire“byName”我正在创建3个JdbcTemplates
@Autowired
@Qualifier("dataSource1")
BasicDataSource dataSource1;
@Autowired
@Qualifier("dataSource2")
BasicDataSource dataSource2;
@Autowired
@Qualifier("dataSource3")
BasicDataSource dataSource3;
@Autowired
@Bean(name="jdbcTemplate1")
public JdbcTemplate createJdbcTemplate(){
return new JdbcTemplate((DateSource)dataSource1)
}
@Autowired
@Bean(name="jdbcTemplate2")
public JdbcTemplate createJdbcTemplate(){
return new JdbcTemplate((DateSource)dataSource2)
}
@Autowired
@Bean(name="jdbcTemplate3")
public JdbcTemplate createJdbcTemplate(){
return new JdbcTemplate((DateSource)dataSource3)
}
StackTrace:
启动ApplicationContext时出错。要显示自动配置报告,请在启用“debug”的情况下重新运行应用程序。 2017-11-16 23:50:04.562 ERROR 15180 --- [主要] o.s.b.d.LoggingFailureAnalysisReporter:
申请失败
说明
com.MyClass中的字段dataSource1需要一个bean,但找到了3个:
- dataSource1: defined in class path resource [datasource.xml]
- dataSource2: defined in class path resource [datasource.xml]
- dataSource3: defined in class path resource [datasource.xml]
动作:
考虑将其中一个bean标记为@Primary,更新使用者以接受多个bean,或使用@Qualifier标识应该使用的bean
当我添加 EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})时,一切正常。
任何人都可以解释为什么我需要排除AutoConfiguration尽管autowiring-byName。
答案 0 :(得分:0)
您不需要忽略自动配置,只需将其中一个数据源标记为@Primary
,因为自动配置可能会尝试逐个获取。这会导致您的错误。
另外,请随时查看the dedicated section in the reference documentation about dealing with multiple datasources;有更好的方法来配置多个数据源,并仍然利用Spring Boot功能和基础架构。