Различия между @MapperScan и @Bean MapperScannerConfigurer - PullRequest
0 голосов
/ 06 мая 2018

У меня есть веб-приложение с несколькими источниками данных, использующее следующую технику:

  • Пружинная загрузка 1.5.12
  • Mybats-Spring-boot-starter 1.3.2

И я предпочел конфигурацию на основе Java. Поэтому у меня есть Datasource1Config.java и Datasource2Config.java.

Я определил SqlSessionTemplate соответственно и использую MapperScannerConfigure, чтобы внедрить мой маппер. Ниже приводится описание источника данных1, а источник данных2 просто подставляет номер.

@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 {...}

Я пытался отследить в режиме отладки и искать в Интернете так много статей, но до сих пор не могу получить ответ. Так может ли кто-нибудь помочь мне?

Спасибо за ваше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...