Spring Boot 配置mybatis多数据源

65 阅读2分钟

配置文件 application.yml primary

second

datasource:
    primary:
      driver-class-name: com.mysql.cj.jdbc.Driver
      # 连接地址
      jdbc-url: jdbc:mysql://localhost:3307/mp?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
      # 用户名
      username: abc
      # 密码
      password: 123456
      type: com.zaxxer.hikari.HikariDataSource
      # 最大连接池数量
      maxPoolSize: 20
      # 最小空闲线程数量
      minIdle: 10
      # 配置获取连接等待超时的时间
      connectionTimeout: 30000
      # 校验超时时间
      validationTimeout: 5000
      # 空闲连接存活最大时间,默认10分钟
      idleTimeout: 600000
      # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
      maxLifetime: 1800000
      # 连接测试query(配置检测连接是否有效)
      connectionTestQuery: SELECT 1
      # 多久检查一次连接的活性
      keepaliveTime: 30000
    secondary:
      # 数据库连接使用 jdbc
      driver-class-name: com.mysql.cj.jdbc.Driver
      # 连接地址
      jdbc-url: jdbc:mysql://localhost:3307/film_user?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
      # 用户名
      username: abc
      # 密码
      password: 123456
      type: com.zaxxer.hikari.HikariDataSource
      # 最大连接池数量
      maxPoolSize: 20
      # 最小空闲线程数量
      minIdle: 10
      # 配置获取连接等待超时的时间
      connectionTimeout: 30000
      # 校验超时时间
      validationTimeout: 5000
      # 空闲连接存活最大时间,默认10分钟
      idleTimeout: 600000
      # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
      maxLifetime: 1800000
      # 连接测试query(配置检测连接是否有效)
      connectionTestQuery: SELECT 1
      # 多久检查一次连接的活性
      keepaliveTime: 30000

MybatisConfigOne.java 关键配置1: sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/**/*Mapper.xml"));

关键配置2: @MapperScan(basePackages = "com.chuxin.demotodolist.mapper.one", sqlSessionFactoryRef = "sqlSessionFactoryOne")

@Configuration
@MapperScan(basePackages = "com.chuxin.demotodolist.mapper.one", sqlSessionFactoryRef = "sqlSessionFactoryOne")
public class MybatisConfigOne {

    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    @Primary
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean("masterDataSourceTransactionManager")
    public DataSourceTransactionManager masterDataSourceTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionFactoryOne")
    @Primary
    public SqlSessionFactory sqlSessionFactoryOne() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(primaryDataSource());
        // 设置mybatis的主配置文件
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/**/*Mapper.xml"));
        return sessionFactory.getObject();
    }
}

MybatisConfigTwo.java

关键配置1:

sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/**/*Mapper.xml"));

关键配置2: @MapperScan(basePackages = "com.chuxin.demotodolist.mapper.two", sqlSessionFactoryRef = "sqlSessionFactoryTwo")

@Configuration
@MapperScan(basePackages = "com.chuxin.demotodolist.mapper.two", sqlSessionFactoryRef = "sqlSessionFactoryTwo")
public class MyBatisConfigTwo {

    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }


    @Bean(name = "sqlSessionFactoryTwo")
    public SqlSessionFactory sqlSessionFactoryTwo() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(secondaryDataSource());
        // 设置mybatis的主配置文件
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/**/*Mapper.xml"));
        return sessionFactory.getObject();
    }
}

mapper/one 目录下存放数据库1的 java 文件 mapper/two 目录下存放数据库2的 java 文件

第一次写文章,请多多指教。