MybatisPlus配置多数据源(一)

本文介绍了如何在SpringBoot项目中结合MybatisPlus配置多个数据源,详细展示了DruidDataSource的使用,并提供了配置监控的示例。通过创建两个不同的数据源配置类,分别用于XXErp和Md数据源,实现了数据源的切换和事务管理。项目结构清晰,代码简洁,适用于需要多数据源场景的开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

积攒很久了没有发帖,其中一度准备总结一下知识,可是由于各种原因被耽搁至今9个多月了,很多准备的题材种种原因无法重新执笔,写的知识也没有很深入,只是作为自己的一个总结。有好的想法可以评论,共同学习。

今天准备分享mybatisplus配置多数据源(通过配置文件的方式)。该种配置适合于场景数据源个数确定,且都有根据数据源进行开发的需求。

项目使用的版本信息如下:

springbooot:2.3.2.RELEASE

mybatisplus:3.4.3.3

直接上代码,创建 整合的配置文件DruidConfiguration :

package com.xx.xx.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 项目名:md
 * 创建人: 
 * 创建时间:2021/11/15 17:58
 * 类名:DruidConfiguration
 * 类描述: 类描述
 */
@Configuration
public class DruidConfiguration {

        /**
         * @author: 
         * 创建时间: 2021/11/17 10:20
         * 描述: xx
         * param
         * return
         */
    @ConfigurationProperties(prefix = "spring.datasource.xx")
    @Bean
    public DataSource xx(){
        return  new DruidDataSource();
    }

        /**
         * @author: xx
         * 创建时间: 2021/11/17 10:20
         * 描述: xx
         * param
         * return
         */
    @ConfigurationProperties(prefix = "spring.datasource.mddatasource")
    @Bean
    public DataSource mdDatasource(){
        return  new DruidDataSource();
    }

    //配置Druid的监控
    //1、配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String,String> initParams = new HashMap<>();
        initParams.put("loginUsername","sa");
        initParams.put("loginPassword","zjiang*76");
        initParams.put("allow","");//默认就是允许所有访问
        initParams.put("deny","223.124.153.078");
        bean.setInitParameters(initParams);
        return bean;
    }
    //2、配置一个web监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.css,/druid/*");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return  bean;
    }
}

创建数据源一的配置文件:XXErpDataSourceConfig

package com.xx.mdstream.config;

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.logging.stdout.StdOutImpl;
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.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;

/**
 * 项目名:middleground
 * 创建人: 
 * 创建时间:2021/11/15 18:09
 * 类名:SelfDataSourceConfig
 * 类描述: xx
 */
@Configuration
@MapperScan(basePackages = "com.xx.mdstream.dao.xxerpDataSource", sqlSessionTemplateRef = "sourceSqlSessionTemplate")
public class XXErpDataSourceConfig {

    @Bean
    @Primary
    public SqlSessionFactory xxErpSqlSessionFactory(@Qualifier("xxErp1076datasource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //扫描xml文件路径
         bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/xxerp/*.xml"));
        //设置打印sql语句
        MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
        mybatisConfiguration.setLogImpl(StdOutImpl.class);
        bean.setConfiguration(mybatisConfiguration);
        return bean.getObject();
    }

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

    @Bean
    @Primary
    public SqlSessionTemplate sourceSqlSessionTemplate(@Qualifier("cqErpSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

创建数据源二的配置文件MdDataSourceConfig

package com.xx.mdstream.config;

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.logging.stdout.StdOutImpl;
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.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;

/**
 * 项目名:middleground
 * 创建人: 
 * 创建时间:2021/11/15 18:09
 * 类名:SelfDataSourceConfig
 * 类描述: 
 */
@Configuration
@MapperScan(basePackages = {"com.xx.mdstream.dao.mdDataSource","com.xx.common.dao"}, sqlSessionTemplateRef = "mdDataSourceSqlSessionTemplate")
public class MdDataSourceConfig {

    @Bean
    @Primary
    public SqlSessionFactory mdSqlSessionFactory(@Qualifier("mdDatasource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //扫描xml文件路径
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/md/*.xml"));
        //设置打印sql语句
        MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
        mybatisConfiguration.setLogImpl(StdOutImpl.class);
        bean.setConfiguration(mybatisConfiguration);
        return bean.getObject();
    }

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

    @Bean
    @Primary
    public SqlSessionTemplate mdDataSourceSqlSessionTemplate(@Qualifier("mdSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

项目中的结构如下:

 实现其实很简单,复制上述代码启动即可运行,其中支持数据库类型翻源码有如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值