springboot和mybatis多数据源整合

主要是配置两个大类:SqlSessionFactory和MapperFactoryBean,还有yaml文件
1.SqlSessionFactory



package com.demo.dhr.attendance.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

/**
 * <p> Title: jwt验证Provider</p>
 * <p> Description: NMyBatis基础配置 创建了一个SqlSessionFactory和一个SqlSessionTemplate,为了支持注解事务,
 *                  增加了@EnableTransactionManagement注解,并且反回了一个PlatformTransactionManagerBean </p>
 *
 */
@Configuration
@ComponentScan
public class MybatisConfig /**implements TransactionManagementConfigurer*/ {

	//主数据源,大数据
	@Bean(name="primaryDataSource")
	@Primary
	@ConfigurationProperties(prefix="spring.datasource.primary")
	public DataSource workerDataSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean(name = "primarySqlSessionFactory")
	@Primary
	public SqlSessionFactory workerSqlSessionFactory() {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		//该属性必须配置,多数据源时会有多个dataSource,同时也需要配置多个sqlSessionFactory来对应。
		bean.setDataSource(workerDataSource());
		//该属性可以给包中的类注册别名,注册后可以直接使用类名,而不用使用全限定的类名(就是不用包含包名)
		bean.setTypeAliasesPackage("com.demo.test.test.entity");
		// 添加XML目录
		ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
		try {
			//配置该属性后,sqlSessionFactory会自动扫描该路径下的所有文件并解析。
			//该路径支持多个,可以用,;\t\n进行分割。
			bean.setMapperLocations(resolver.getResources("classpath:com/demo/test/test/mapper/primary/*.xml"));
			return bean.getObject();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	@Bean(name="jdbcTemplate")
	@Primary
	public JdbcTemplate jdbcTemplate(){
		return new JdbcTemplate(workerDataSource());
	}
	@Bean(name="whjbDataSource")
	@ConfigurationProperties(prefix="spring.datasource.whjb")
	public DataSource whjbDataSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean(name = "whjbSqlSessionFactory")
	public SqlSessionFactory whjbSqlSessionFactory() {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		//该属性必须配置,多数据源时会有多个dataSource,同时也需要配置多个sqlSessionFactory来对应。
		bean.setDataSource(whjbDataSource());
		//该属性可以给包中的类注册别名,注册后可以直接使用类名,而不用使用全限定的类名(就是不用包含包名)
		bean.setTypeAliasesPackage("com.demo.test.test.entity");
		// 添加XML目录
		ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
		try {
			//配置该属性后,sqlSessionFactory会自动扫描该路径下的所有文件并解析。
			//该路径支持多个,可以用,;\t\n进行分割。
			bean.setMapperLocations(resolver.getResources("classpath:com/demo/test/test/mapper/whjb/*.xml"));
			return bean.getObject();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	@Bean(name="whjbJdbcTemplate")
	public JdbcTemplate whjbJdbcTemplate(){
		return new JdbcTemplate(whjbDataSource());
	}

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

	@Bean(name = "zjSqlSessionFactory")
	public SqlSessionFactory zjSqlSessionFactory() {
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		//该属性必须配置,多数据源时会有多个dataSource,同时也需要配置多个sqlSessionFactory来对应。
		bean.setDataSource(zjDataSource());
		//该属性可以给包中的类注册别名,注册后可以直接使用类名,而不用使用全限定的类名(就是不用包含包名)
		bean.setTypeAliasesPackage("com.demo.test.test.entity");
		// 添加XML目录
		ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
		try {
			//配置该属性后,sqlSessionFactory会自动扫描该路径下的所有文件并解析。
			//该路径支持多个,可以用,;\t\n进行分割。
			bean.setMapperLocations(resolver.getResources("classpath:com/demo/test/test/mapper/zj/*.xml"));
			return bean.getObject();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	@Bean(name="zjJdbcTemplate")
	public JdbcTemplate zjJdbcTemplate(){
		return new JdbcTemplate(zjDataSource());
	}




}


2.MapperFactoryBean

package com.demo.dhr.attendance.config;

import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,
 * MyBatis-Spring 提供了一个动态代理的实现:MapperFactoryBean。
 * 这个类 可以让你直接注入数据映射器接口到你的 service 层 bean 中。
 * 当使用映射器时,你仅仅如调 用你的 DAO 一样调用它们就可以了,
 * 但是你不需要编写任何 DAO 实现的代码,因为 MyBatis-Spring 将会为你创建代理。
 */
@Configuration
@AutoConfigureAfter(MybatisConfig.class)
public class MyBatisMapperScannerConfig {
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer1() {
    	/*
    	 * 一般用过的最多也就是这3个属性,实际情况下最常用的只有basePackage。
    	 * 1,basePackage属性 可以写多个,可以用,;\t\n进行分割。
    	 * 2,annotationClass 该属性实际上就是起到一个过滤的作用,如果设置了该属性,那么MyBatis的接口只有包含该注解,才会被扫描进去。
    	 * 3,sqlSessionFactoryBeanName 这个属性一般都用不到,只有当你配置多数据源的时候,这是会有多个sqlSessionFactory,你就需要通过该属性来指定哪一个sqlSessionFactory
    	 */
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("primarySqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.demo.test.test.mapper.primary");
        return mapperScannerConfigurer;
    }
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer7() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("zjSqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.demo.test.test.mapper.zj");
        return mapperScannerConfigurer;
    }
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer8() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("whjbSqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.demo.test.test.mapper.whjb");
        return mapperScannerConfigurer;
    }
}

3.yaml文件

# 本地环境配置
spring:
  profiles: stage

  # 数据库连接配置
  datasource:
    primary:
      driver-class-name: com.mysql.jdbc.Driver
      jdbc-url: jdbc:mysql://10.130.217.215:3306/dataBase?serverTimezone=GMT%2B8&zeroDateTimeBehavior=round&useSSL=false
      username: root
      password: root
    zj:
      driver-class-name: com.mysql.jdbc.Driver
      jdbc-url: jdbc:mysql://10.130.217.215:3306/dataBase?serverTimezone=GMT%2B8&zeroDateTimeBehavior=round&useSSL=false
      username: root
      password: root
    whjb:
      driver-class-name: com.mysql.jdbc.Driver
      jdbc-url: jdbc:mysql://10.153.66.131:3306/dataBase?serverTimezone=GMT%2B8&zeroDateTimeBehavior=round&useSSL=false
      username: root
      password: root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值