当我有自动装配的bean byname

时间:2017-11-16 18:01:12

标签: java spring spring-mvc spring-boot

我有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。

1 个答案:

答案 0 :(得分:0)

您不需要忽略自动配置,只需将其中一个数据源标记为@Primary,因为自动配置可能会尝试逐个获取。这会导致您的错误。

另外,请随时查看the dedicated section in the reference documentation about dealing with multiple datasources;有更好的方法来配置多个数据源,并仍然利用Spring Boot功能和基础架构。