当前位置: 首页 > 知识库问答 >
问题:

MyPersbatis的Spring数据源

都乐逸
2023-03-14

我使用MyBatis 3.3.1和Spring 4.3从两个不同的数据库中提取数据。要扫描映射程序的两个配置类如下所示:

    @Configuration  
    @MapperScan(value="com.mapper1.map",   
   SqlSessionFactoryRef="sqlSessionFactory1")
   public class AppConfig {
    @Bean
    public DataSource getDataSource1() {
       BasicDataSource dataSource = new BasicDataSource();
       dataSource.setDriverClassName("com.mysql.jdbc.Driver");
       dataSource.setUrl("jdbc:mysql://localhost:3306/database1");
       dataSource.setUsername("user");
       dataSource.setPassword("pw");
       return dataSource;
   }
   @Bean
   public DataSourceTransactionManager transactionManager1() {
       return new DataSourceTransactionManager(getDataSource1());
   }
   @Bean
   public SqlSessionFactory sqlSessionFactory1() throws Exception {
      SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
      sessionFactory.setDataSource(getDataSource1());
      return sessionFactory.getObject();
   }
} 

    @Configuration
   @MapperScan(value="com.mapper2.map",   
   SqlSessionFactoryRef="sqlSessionFactory2")
   public class AppConfig {
    @Bean
    public DataSource getDataSource2() {
       BasicDataSource dataSource = new BasicDataSource();
       dataSource.setDriverClassName("com.mysql.jdbc.Driver");
       dataSource.setUrl("jdbc:mysql://localhost:3307/database2");
       dataSource.setUsername("user");
       dataSource.setPassword("pw");
       return dataSource;
   }
   @Bean
   public DataSourceTransactionManager transactionManager2() {
       return new DataSourceTransactionManager(getDataSource2());
   }
   @Bean
   public SqlSessionFactory sqlSessionFactory2() throws Exception {
      SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
      sessionFactory.setDataSource(getDataSource2());
      return sessionFactory.getObject();
   }
} 

代码部署得很好,但只有来自数据源1的映射器可以工作。当我试图使用数据源2中的映射器时,我从数据库中得到一个“找不到表”异常。问题是,尽管我正在设置要在mapperScan中使用的特定SqlSessionFactory,但它最终会对所有映射程序使用另一个SqlSessionFactory。如果我在配置1中注释掉SqlSessionFactory,那么配置2将起作用。

请注意,如果我不使用MapperScan,而是使用MapperScannerConfigrer bean,我就能够正确地检索数据。

还有人在使用@MapperScan处理多个数据源时遇到问题吗?

共有1个答案

程皓轩
2023-03-14

我在你的代码中看到的唯一问题是SqlSessionFactoryRef应该来自小写:(sqlSessionFactory)。除此之外,一切都很好,这种方法适合我。

您还可以查看ace-mybatis。它允许只配置一个bean的多个数据源。

 类似资料:
  • 我正在使用spring数据jpa为我的服务实现多事务(数据库),带有两个持久的单元名。并在Jboss 6.4 EAP中部署 以下是我的服务详情 在Jboss中,我无法部署它,我遇到以下异常: 原因:org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有com.test.demo.domain.repository.Tb

  • 我正在尝试将每个@存储库与spring boot和Spring Data JPA的不同数据源连接起来。我使用了以下http://xantorohara.blogspot.com/2013/11/spring-boot-jdbc-with-multiple.html作为参考。这里是我正在使用的代码,试图使用Spring Data JPA实现类似的解决方案。 CustomerDBConfig.java

  • 我正在逐步将Spring Boot引入Spring JPA项目。我的意图是首先介绍Spring Boot,而不是在一些后期的Spring数据,但我找不到任何使用Spring Boot JPA而没有Spring数据的示例(也找不到合适的启动器)。 怎么会?在没有Spring数据的情况下,将Spring Boot引入Spring JPA项目有什么好处吗?或者只有在Spring数据到位的情况下才有意义。

  • 我的应用程序有两个数据源。第一个数据源使用JdbcTemplate访问Postgre。第二个数据源使用Spring数据JPA访问CockroachDb。 所以我为这个数据源创建了两种配置。 除了具有空间数据的对象之外,坚持使用这两个数据源工作正常。当我试图保存空间数据到CockroachDb,我得到一个错误: Hibernate:选择geoobject0_. id为id1_2_0_,geoobje

  • 我试图在spring boot项目中配置spring批处理,我想在没有数据源的情况下使用它。我发现是一条可行之路,但我无法让它发挥作用。问题是我已经定义了另外3个数据源,但我不想在springBatch中使用其中任何一个。 我已经检查了默认实现,如果找不到数据源,它将完全按照我的要求执行。问题是我有三个,不想用任何一个。 请不要建议使用hsql或其他内存DB,因为我不想这样。

  • 我正在使用Spring data redis和jedis与aspectJ进行日志记录。但是得到以下错误。请帮助解决此错误。我在这上面花了很多时间,但无法解决它。 我使用的是Spring数据redis 1.4.1,jedis-2.6.1和Redis-2.8 错误详情:- 下面是使用spring data redis的redis Sentinel配置的Java配置文件 下面是用于日志记录的Aspect