【发布时间】:2018-01-16 15:15:22
【问题描述】:
我有 3 个数据源,我设置如下:
@Configuration
@Component
public class DataSourceConfig {
@Bean("foo")
@ConfigurationProperties(prefix = "spring.datasource.foo")
public DataSource foo() {
DataSource dataSource = DataSourceBuilder.create().build();
return dataSource;
}
@Bean("bar")
@ConfigurationProperties(prefix = "spring.datasource.bar")
public DataSource bar() {
DataSource dataSource = DataSourceBuilder.create().build();
return dataSource;
}
@Bean("baz")
@ConfigurationProperties(prefix = "spring.datasource.baz")
public DataSource baz() {
DataSource dataSource = DataSourceBuilder.create().build();
return dataSource;
}
}
我正在尝试将它们自动连接到我的消费者类中,如下所示:
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyClass {
@Autowired
public MyClass(
@Autowired @Qualifier("foo") DataSource foo,
@Autowired @Qualifier("bar") DataSource bar,
@Autowired @Qualifier("baz") DataSource baz
) {
;
}
}
当应用程序尝试启动时,我收到错误:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.example.mypackage.MyClass required a single bean, but 3 were found:
- foo: defined by method 'foo' in class path resource [com/example/DataSourceConfig.class]
- bar: defined by method 'bar' in class path resource [com/example/DataSourceConfig.class]
- baz: defined by method 'baz' in class path resource [com/example/DataSourceConfig.class]
为什么@Qualifier 不起作用?
我正在使用 Spring Boot 1.5.6.RELEASE
【问题讨论】:
-
尝试从构造函数参数中删除
@Autowired。 (在Myclass构造函数上方只留下一个)。如果不清楚,请保留@Qualifier -
@Oleg 运气不好 :(
-
奇怪,即使没有命名 bean 和
@Qualifier也对我有用。仅基于方法和参数名称。我使用的是 Spring 4,但不是 5。 -
为我工作。见this sample。
-
关于这个问题的任何更新?
标签: spring spring-boot dependency-injection spring-4