SpringBoot整合mybatis、mybatisplus多数据源配置

MyBatis多数据源配置

1.pom.xml 引入依赖

        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.1.2
        
        
            mysql
            mysql-connector-java
            6.0.6
        
         
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.20
        

这里使用的是druid连接池
2.application.yml 数据库配置

spring:
  datasource:
    cherish: 
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/cherish?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
      username: root
      password: root
     ceshi:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ceshi?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
      username: root
      password: root

3.创建第一个数据源的配置文件

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.abc.jx.dao", sqlSessionFactoryRef = "oneSqlSessionFactory")
public class DateSourceConfig {
    @Value("${spring.datasource.cherish.driver-class-name}")
    private String driverClassName;

    @Value("${spring.datasource.cherish.url}")
    private String url;

    @Value("${spring.datasource.cherish.username}")
    private String username;

    @Value("${spring.datasource.cherish.password}")
    private String password;

    @Bean(name = "oneDataSource")
    @Primary
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.driverClassName);
        dataSource.setUrl(this.url);
        dataSource.setUsername(this.username);
        dataSource.setPassword(this.password);
        return dataSource;
    }

    @Bean(name = "oneSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("oneDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/cherish/*Mapper.xml"));
        return bean.getObject();
    }

    @Bean(name = "oneTransactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(@Qualifier("oneDataSource") DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }
    @Bean(name = "oneSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("oneSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

4.创建第二个数据源配置文件

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.abc.ceshi.dao", sqlSessionFactoryRef = "twoSqlSessionFactory")
public class SubDateSourceConfig {
    @Value("${spring.datasource.ceshi.driver-class-name}")
    private String driverClassName;

    @Value("${spring.datasource.ceshi.url}")
    private String url;

    @Value("${spring.datasource.ceshi.username}")
    private String username;

    @Value("${spring.datasource.ceshi.password}")
    private String password;

    @Bean(name = "twoDataSource")
    @Primary
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.driverClassName);
        dataSource.setUrl(this.url);
        dataSource.setUsername(this.username);
        dataSource.setPassword(this.password);
        return dataSource;
    }

    @Bean(name = "twoSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("twoDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/ceshi/*Mapper.xml"));
        return bean.getObject();
    }

    @Bean(name = "twoTransactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(@Qualifier("twoDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "twoSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("twoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

注意点:
1.@Primary:优先方案,被注解的实现,优先被注入。
2.@Qualifier:先声明后使用,相当于多个实现起多个不同的名字,注入时候告诉我你要注入哪个。
3.该配置是对某个包下的dao层和mapper.xml文件绑定数据源。
到此处MyBatis多数据源配置就算结束了,只需要在对应包下dao层和mapper编写就可以访问对应的数据源了。

MyBatis-PLUS多数据源配置

1.pom.xml 引入依赖

         
            com.baomidou
            mybatis-plus-boot-starter
            3.1.0
        
        
            mysql
            mysql-connector-java
            6.0.6
        
         
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.20
        
        
          com.baomidou
          dynamic-datasource-spring-boot-starter
          3.0.0
        

2.application.yml 数据库配置

spring:
  datasource:
    dynamic:
      datasource:
        cherish:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/cherish?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
          username: root
          password: root
        ceshi:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ceshi?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
          username: root
          password: root

这里格式需要固定

# 多主多从                      纯粹多库(记得设置primary)                   混合配置
spring:                               spring:                               spring:
  datasource:                           datasource:                           datasource:
    dynamic:                              dynamic:                              dynamic:
      datasource:                           datasource:                           datasource:
        master_1:                             mysql:                                master:
        master_2:                             oracle:                               slave_1:
        slave_1:                              sqlserver:                            slave_2:
        slave_2:                              postgresql:                           oracle_1:
        slave_3:                              h2:                                   oracle_2:

3.使用@DS来切换数据源
@DS("cherish")
public interface UserMapper {
}

@DS:作用域:方法、类
此时就可以尽情挥洒了

参考文献:
Spring Boot2.X MyBatis 多数据源配置
MyBatis-PLUS官网

你可能感兴趣的:(SpringBoot整合mybatis、mybatisplus多数据源配置)