SpringBoot项目配置多数据源,结合mybatis-plus框架

最近项目需要接入多数据源,进行以下改造。项目已上线,请放心食用!

下一篇:SpringBoot项目配置多数据源-Transcational事务篇-CSDN博客

开发流程步骤


1、存在原有的mybatis-plus配置,需要剔除

2、引入相关依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>


2、Spring配置文件编写多数据源配置

spring:
  datasource:
    db01:
      jdbc-url: xxx
      username: xxx
      password: xxx
      driver-class-name: com.mysql.cj.jdbc.Driver
      type: com.zaxxer.hikari.HikariDataSource
      maximum-pool-size: 50
      minimum-idle: 20
      connection-timeout: 60000
      idle-timeout: 600000
      max-lifetime: 640000
      connection-test-query: SELECT 1 from dual
    db02:
      jdbc-url: xxx
      username: xxx
      password: xxx
      driver-class-name: com.mysql.cj.jdbc.Driver
      type: com.zaxxer.hikari.HikariDataSource
      maximum-pool-size: 50
      minimum-idle: 20
      connection-timeout: 60000
      idle-timeout: 600000
      max-lifetime: 640000
      connection-test-query: SELECT 1 from dual


3、新增注册类,区分多数据源

插件配置,比如分页插件,如果项目没用到可不配置

@Configuration
public class MybatisPlusConfig
{

	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor()
	{
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
		paginationInnerInterceptor.setDbType(DbType.MYSQL);
		paginationInnerInterceptor.setOverflow(true);
		interceptor.addInnerInterceptor(paginationInnerInterceptor);
		return interceptor;
	}
}

数据源1 

@Configuration
@MapperScan(basePackages = "com.example.xxx.xxx01.mapper", sqlSessionFactoryRef = "db01SqlSessionFactory")
public class DataSourceConfigDB01 {

    @Resource
    MybatisPlusInterceptor mybatisPlusInterceptor;

    @Primary
    @Bean("db01DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db01")
    public DataSource getDB01DataSource(){
        //使用默认的Hikari连接池时,用默认的DataSourceBuilder:
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean("db01SqlSessionFactory")
    public SqlSessionFactory db01SqlSessionFactory(@Qualifier("db01DataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        MybatisConfiguration configuration = new MybatisConfiguration();
        // 枚举类型与数据库值的转换,比如在code属性上加@EnumValue
        configuration.setDefaultEnumTypeHandler(MybatisEnumTypeHandler.class);
        // 扫描的mapper.xml配置,多数据源需要区分开
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db01/*.xml"));
        bean.setConfiguration(configuration);
        // 配置插件拦截器(比如PaginationInnerInterceptor,缺失配置,插件将会不生效并且会引发其他问题)
        bean.setPlugins(mybatisPlusInterceptor);
        return bean.getObject();
    }

    @Primary
    @Bean("db01SqlSessionTemplate")
    public SqlSessionTemplate db01SqlSessionTemplate(@Qualifier("db01SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

数据源2

@Configuration
@MapperScan(basePackages = "com.example.xxx.xxx02.mapper", sqlSessionFactoryRef = "db02SqlSessionFactory")
public class DataSourceConfigDB02 {

    @Resource
    MybatisPlusInterceptor mybatisPlusInterceptor;

    @Bean("db02DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db02")
    public DataSource getDB02DataSource(){
        //使用默认的Hikari连接池时,用默认的DataSourceBuilder:
        return DataSourceBuilder.create().build();
    }

    @Bean("db02SqlSessionFactory")
    public SqlSessionFactory db02SqlSessionFactory(@Qualifier("db02DataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean  bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setDefaultEnumTypeHandler(MybatisEnumTypeHandler.class);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db02/*.xml"));
        bean.setConfiguration(configuration);
        bean.setPlugins(mybatisPlusInterceptor);
        return bean.getObject();
    }

    @Bean("db02SqlSessionTemplate")
    public SqlSessionTemplate db02SqlSessionTemplate(@Qualifier("db02SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

注意


dao、mapper、mapper.xml 需要关联起来,每个数据各一套,别混用。

总结


添加配置类
使用@MapperScan扫描Mapper接口
配置DataSource,使用Hikari连接池(市面上还有 C3P0等)
把DataSource注入SqlSessionFactory。SqlSessionFactory作用大,功能强劲,事务|插件(分页等)|枚举类型与数据库值的转换
把SqlSessionFactory注入SqlSessionTemplate模板
第二个也是这样配置,用命名区分即可

 下一篇:SpringBoot项目配置多数据源-Transcational事务篇-CSDN博客SpringBoot项目配置多数据源-Transcational事务https://blog.csdn.net/chenhua141/article/details/140909273

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值