【问题标题】:Differences between @MapperScan and @Bean MapperScannerConfigurer@MapperScan 和 @Bean MapperScannerConfigurer 的区别
【发布时间】:2018-05-06 16:41:55
【问题描述】:

我有一个采用以下技术的多数据源 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 {...}

我尝试使用调试模式进行跟踪,并在互联网上搜索了很多文章,但仍然无法得到答案。那么如果有人可以帮助我吗?

感谢您的宝贵时间。

【问题讨论】:

  • 你看过here吗?我可以为您提供为 MyBatis 3 配置的多个数据源的示例,但我没有成功地为 spring-mybatis 的多个数据源这样做(如果内存正确地为我服务,那么对多个数据源非常有限制)跨度>
  • 我不确定我是否看过那篇文章。但是,我不是问如何实现多数据源,而是注解@MapperScan 和 MapperScannerConfigurer bean 有什么区别。我不确定我是否错过了文章中的某些内容。如果是,请再次提醒我。谢谢。

标签: java spring spring-boot spring-mybatis multi-database


【解决方案1】:

我想答案就在这里。 https://mybatis.org/spring/mappers.html

扫描映射器 无需注册所有映射器 一个。相反,您可以让 MyBatis-Spring 扫描您的类路径以查找 他们。

有三种不同的方法:

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

自 2.0.2 起,mapper 扫描功能支持一个选项 (lazy-initialization) 控制延迟初始化 启用/禁用映射器 bean。添加此选项的动机 支持延迟初始化控制功能 春季启动 2.2。此选项的默认值为 false(= 不使用惰性 初始化)。如果开发人员想使用延迟初始化 mapper bean,应该明确设置为true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2011-10-11
    • 2011-05-16
    相关资源
    最近更新 更多