Я использую Spring с MyBatis, и он отлично работает для одной базы данных. Я столкнулся с трудностями при попытке добавить другую базу данных (см. reproducible example on Github).Весна с MyBatis: ожидаемый единственный совпадающий компонент, но найден 2
Я использую конфигурацию Spring Java (т. Е. Не XML). Большинство примеров, которые я видел, показывают, как добиться этого, используя XML.
У меня есть два класса конфигурации данных (A B) & как это:
@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();
}
}
Два мапперы и услуги, которые 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();
}
}
Приложение не запускается:
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
, чтобы устранить автоувеличивание, хотя я не был уверен, где его добавить.
Вы видите, куда я иду не так?
Вы можете публиковать полное сообщение об ошибке? Обычно весна сообщает вам поле с автопроводом и фасоль, вызывающую ошибку. – ben75
'@Qaulifier (« name_of_bean »)' может быть размещен до или после аннотации '@ Autowired' конкретного поля, на которое вы хотите нацелиться. Я считаю, – BretC
Спасибо @ Ben75. Я опубликовал полный вывод: https://gist.github.com/alexwoolford/1f3e799deb3be32a4356 –