2016-12-21 27 views
0

Whole Source Code has the problem belowFrühling @Qualifier und @Autowire funktioniert nicht

ich mit zwei Datenbanken arbeiten bin. Also habe ich zwei Datenquellen mit anderem Namen hinzugefügt. Als ich dachte, ich injiziere richtige Datenquelle. Ich habe unten einen unerwarteten Fehler erhalten. Was stimmt nicht mit meinen Codes?

meine application.yml Datei

<pre> 
spring: 
    datasource: 
    source: 
     driver-class-name: org.sqlite.JDBC 
     url: jdbc:sqlite::resources/db/StudentCarrer.db3 
    destination: 
     driver-class-name: com.mysql.jdbc.Driver 
     url: jdbc:mysql://nas4:3306/cku 
     username: cku 
     password: cku 
</pre> 

meine DBConfig.java Datei

<pre> 
@Configuration 
public class DBConfig { 

    @Bean(name = "srcDataSource") 
    @ConfigurationProperties(prefix = "spring.datasource.source") 
    public DataSource srcDataSource() { 
    return DataSourceBuilder.create().build(); 
    } 

    @Bean(name = "srcJdbcTemplate") 
    public JdbcTemplate srcJdbcTemplate(@Qualifier("srcDataSource") DataSource srcDataSource) { 
    return new JdbcTemplate(srcDataSource); 
    } 

    @Bean(name = "dstDataSource") 
    @ConfigurationProperties(prefix = "spring.datasource.destination") 
    public DataSource dstDataSource() { 
    return DataSourceBuilder.create().build(); 
    } 

    @Bean(name = "dstJdbcTemplate") 
    public JdbcTemplate dstJdbcTemplate(@Qualifier("dstDataSource") DataSource dstDataSource) { 
    return new JdbcTemplate(dstDataSource); 
    } 
} 
</pre> 

meine DBImporter.java Datei

<pre> 
@Component 
public class DBImporter { 

    private final Logger logger = LoggerFactory.getLogger(this.getClass()); 

    @Autowired @Qualifier("srcDataSource") 
    public DataSource srcDataSource; 

    @Autowired @Qualifier("srcJdbcTemplate") 
    public JdbcTemplate srcJdbcTemplate; 

    @Autowired @Qualifier("dstDataSource") 
    public DataSource dstDataSource; 

    @Autowired @Qualifier("dstJdbcTemplate") 
    public JdbcTemplate dstJdbcTemplate; 
} 
</pre> 

Und ich habe diesen Fehler.

<pre> 
*************************** 
APPLICATION FAILED TO START 
*************************** 

Description: 

Field srcDataSource in com.cku.assmt.dbimp.DBImporter required a single bean, but 2 were found: 
    - srcDataSource: defined by method 'srcDataSource' in class path resource [com/cku/assmt/dbimp/DBConfig.class] 
    - dstDataSource: defined by method 'dstDataSource' in class path resource [com/cku/assmt/dbimp/DBConfig.class] 


Action: 

Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed 
</pre> 
+1

Sind Sie absolut sicher, dass Sie richtig 'org importieren .springframework.beans.factory.annotation.Qualifier' im 'DbImporter'? Das ergibt wirklich keinen Sinn für mich. – zero01alpha

+0

Dies ist der Code mit dem Problem. https://kldp.org/files/dbimp.test_.zip – Shinbop

+0

Ja, ich klicke nicht darauf. Fügen Sie es zu Ihrem Post hinzu, wenn Sie möchten, dass die Leute es sehen. – zero01alpha

Antwort

0

Eher @Bean (name = "myName"), verwenden Sie zwei Anmerkungen über die Methode als die Verwendung von: @Bean @Qualifier ("myName")

+0

Ich habe Ihren Vorschlag versucht und ich habe den gleichen Fehler. Das ist das ganze Projekt. https://kldp.org/files/dbimp.test_.zip – Shinbop

Verwandte Themen