我有一个具有以下技术的多数据源 Web 应用程序:
- 春季启动 1.5.12
- Mybats-Spring-boot-starter 1.3.2
我更喜欢基于 Java 的配置。因此,我有 Datasource1Config.java 和 Datasource2Config.java。
我分别定义了 SqlSessionTemplate,并使用 MapperScannerConfigure 来注入我的映射器。以下是datasource1,datasource2只是替换数字。
@Bean(name = "dataSource1MapperScannerConfigurer")
public MapperScannerConfigurer msc() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setSqlSessionFactoryBeanName("dataSource1SqlSessionFactory");
msc.setSqlSessionTemplateBeanName("dataSource1SqlSessionFactory");
msc.setBasePackage("demo.mybatisspring.mapper.ds1");
return msc;
}
然后,错误发生了
file [C:\...target\classes\demo\mybatisspring\mapper\ds1\UserMapper.class] required a single bean, but 2 were found:
- dataSource1SqlSessionFactory: defined by method 'sqlSessionFactoryBean' in class path resource [demo/mybatisspring/config/DataSource1Config.class]
- dataSource2SqlSessionFactory: defined by method 'sqlSessionFactoryBean2' in class path resource [demo/mybatisspring/config/DataSource2Config.class]
但是,如果我如下使用@MapperScan 注入映射器,一切都会正常工作。(当一个使用@MapperScan 而另一个使用@Bean MapperScannerConfigurer 时也可以正常工作)
@MapperScan(basePackages = "demo.mybatisspring.mapper.ds1", sqlSessionTemplateRef = "dataSource1SqlSessionFactory")
public class DataSource1Config {...}
@MapperScan(basePackages = "demo.mybatisspring.mapper.ds2", sqlSessionTemplateRef = "dataSource2SqlSessionFactory")
public class DataSource2Config {...}
我尝试使用调试模式进行跟踪并在互联网上搜索了很多文章,但仍然无法得到答案。那么如果有人可以帮助我吗?
谢谢你的时间。