积攒很久了没有发帖,其中一度准备总结一下知识,可是由于各种原因被耽搁至今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);
}
}
项目中的结构如下:
实现其实很简单,复制上述代码启动即可运行,其中支持数据库类型翻源码有如下: