Ich benutze Frühling mit MyBatis und es arbeitete wirklich gut für eine einzelne Datenbank. Beim Versuch, eine weitere Datenbank hinzuzufügen, stieß ich auf Schwierigkeiten (siehe reproducible example on Github).Frühling mit MyBatis: erwartete einzelne zusammenpassende Bohne aber gefunden 2
Ich verwende Spring Java-Konfiguration (d. H. Nicht XML). Die meisten Beispiele, die ich gesehen habe, zeigen, wie dies mit XML erreicht wird.
Ich habe zwei Datenkonfigurationsklassen (A & B) wie folgt aus:
@Configuration
@MapperScan("io.woolford.database.mapper")
public class DataConfigDatabaseA {
@Bean(name="dataSourceA")
public DataSource dataSourceA() throws SQLException {
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setDriver(new com.mysql.jdbc.Driver());
dataSource.setUrl("jdbc:mysql://" + dbHostA + "/" + dbDatabaseA);
dataSource.setUsername(dbUserA);
dataSource.setPassword(dbPasswordA);
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSourceA());
return sessionFactory.getObject();
}
}
Zwei Mapper, und einen Service, der die Mapper autowires:
@Service
public class DbService {
@Autowired
private DbMapperA dbMapperA;
@Autowired
private DbMapperB dbMapperB;
public List<Record> getDabaseARecords(){
return dbMapperA.getDatabaseARecords();
}
public List<Record> getDabaseBRecords(){
return dbMapperB.getDatabaseBRecords();
}
}
Die Anwendung wird nicht gestartet:
Error creating bean with name 'dataSourceInitializer':
Invocation of init method failed; nested exception is
org.springframework.beans.factory.NoUniqueBeanDefinitionException:
No qualifying bean of type [javax.sql.DataSource] is defined:
expected single matching bean but found 2: dataSourceB,dataSourceA
Ich habe gelesen, dass es möglich ist, diezu verwenden 0 Annotation, um das Autowiring zu entschlüsseln, obwohl ich nicht sicher war, wo ich es hinzufügen könnte.
Können Sie sehen, wo ich falsch liege?
Können Sie die vollständige Fehlermeldung posten? Normalerweise sagt spring Ihnen das autowired Feld und die Bean, die den Fehler verursachen. – ben75
'@Qaulifier (" name_of_bean ")' kann vor oder nach der '@ Autowired' Annotation des bestimmten Felds platziert werden, auf das ich zielen möchte – BretC
Danke @ Ben75. Ich postete die volle Ausgabe zu: https://gist.github.com/alexwoolford/1f3e799deb3be32a4356 –