Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@Qualifier is not working

I have 3 data sources that I set up as follows:

@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;
    }

}

I am trying to autowire them in to my consumer class as follows:

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
            ) {
        ;
    }

}

When the app tries to start, I get the error:

***************************
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] 

Why is @Qualifier not working?

I'm using Spring Boot 1.5.6.RELEASE

like image 889
Adam Avatar asked Sep 15 '25 13:09

Adam


1 Answers

Make one of the beans primary by adding @Primary annotation. Then qualifier should be recognized.

like image 174
StanislavL Avatar answered Sep 17 '25 06:09

StanislavL