Java @MapperScan和@Bean MapperScannerConfiguration之间的差异

Java @MapperScan和@Bean MapperScannerConfiguration之间的差异,java,spring,spring-boot,spring-mybatis,multi-database,Java,Spring,Spring Boot,Spring Mybatis,Multi Database,我有一个具有以下技术的多数据源web应用程序: 弹簧靴1.5.12 Mybats弹簧靴启动器1.3.2 我更喜欢基于Java的配置。因此,我有Datasource1Config.java和Datasource2Config.java 我分别定义了SqlSessionTemplate,并使用MapperScannerConfigure注入映射器。下面是datasource1,datasource2只是替换数字 @Bean(name = "dataSource1MapperScannerConf

我有一个具有以下技术的多数据源web应用程序:

  • 弹簧靴1.5.12
  • Mybats弹簧靴启动器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注入mappers,一切都会正常工作。(当一个使用@MapperScan,另一个使用@Bean MapperScannerConfigure时也可以正常工作)

我试着用调试模式进行跟踪,在互联网上搜索了这么多文章,但仍然无法得到答案。如果有人能帮我

谢谢您的时间。

我想答案就在这里

扫描地图绘制者无需将所有地图绘制者注册为一个 一个接一个。相反,您可以让MyBatis Spring扫描您的类路径以查找 他们

有三种不同的方法:

使用元素。使用注释@MapperScan 使用经典的SpringXML文件并注册 MapperScannerConfigure和@MapperScan都是 MyBatis Spring 1.2.0中引入的功能@MapperScan需要 Spring 3.1+

从2.0.2开始,mapper扫描功能支持一个选项 (延迟初始化)控制延迟初始化的 已启用/禁用映射器bean。添加此选项的动机 支持由支持的惰性初始化控件功能 弹簧靴2.2。此选项的默认值为false(=不使用lazy) 初始化)。如果开发人员希望使用延迟初始化 映射器bean,它应该设置为true


你看过了吗?我可以为您提供一个为MyBatis 3配置的多个数据源的示例,但是我没有成功地为spring MyBatis配置多个数据源(如果内存没有问题的话,这对多个数据源来说是非常有限的)。我不确定我是否看到了这篇文章。然而,我不是问如何实现多数据源,而是问annotation@MapperScan和MapperScannerConfigurer bean之间的区别。我不确定我是否在文章中遗漏了什么。如果是,请再次提醒我。谢谢
@MapperScan(basePackages = "demo.mybatisspring.mapper.ds1", sqlSessionTemplateRef = "dataSource1SqlSessionFactory")
public class DataSource1Config {...}

@MapperScan(basePackages = "demo.mybatisspring.mapper.ds2", sqlSessionTemplateRef = "dataSource2SqlSessionFactory")
public class DataSource2Config {...}