私はMyBatisでSpringを使用していました。私は別のデータベースを追加しようとすると問題に遭遇しました(reproducible example on Github参照)。SpringとMyBatis:期待される単一の一致するBeanが見つかりましたが、2が見つかりました。
私はSpringのJava設定(つまりXMLではなく)を使用しています。私が見た例のほとんどは、XMLを使ってこれを達成する方法を示しています。
私はこのような二つのデータ設定クラス(& B)持っている:マッパー、およびマッパーをautowiresサービス
@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();
}
}
つを:
@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();
}
}
アプリケーションが起動しません。
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
私は、@Qualifier
の注釈を使ってオートワイヤリングを曖昧さを取り除きましたが、どこに追加するかはわかりませんでした。
どこが間違っているのか分かりますか?
完全なエラーメッセージを投稿できますか?通常springはautowiredフィールドとエラーを引き起こすBeanを指示します。 – ben75
'@Qaulifier(" name_of_bean ")'は、特定のフィールドの '@ Autowired'アノテーションの前後に置くことができます。 – BretC
Thanks @ Ben75私は完全な出力をhttps://gist.github.com/alexwoolford/1f3e799deb3be32a4356 –