SpringBoot整合MyBatis多数据源配置

Application.yml文件

server:
  port: 8080
spring:
  application:
    name: item-service
  datasource:
    db1:
      driverClassName: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
      username: root
      password: ****
    db2:
      driverClassName: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/sakila?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
      username: root
      password: ****

下面我们写一个配置类用来创建DataSource 对象

import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.slf4j.Slf4j;

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 javax.sql.DataSource;

@Slf4j
@Configuration
public class DataSourceConfig {

    @Value("${spring.datasource.db1.url}")
    public String urlDb1;
    @Value("${spring.datasource.db1.username}")
    public String usernameDb1;
    @Value("${spring.datasource.db1.password}")
    public String passwordDb1;


    @Value("${spring.datasource.db2.url}")
    public String urlDb2;
    @Value("${spring.datasource.db2.username}")
    public String usernameDb2;
    @Value("${spring.datasource.db2.password}")
    public String passwordDb2;

    @Bean("DataSourceDb1")
    @Primary
    public DataSource initDataSourceDb1() {
        DruidDataSource dataSource = initDruidDataSource();
        dataSource.setUrl(urlDb1);
        dataSource.setUsername(usernameDb1);
        dataSource.setPassword(passwordDb1);
        return dataSource;
    }

    @Bean("DataSourceDb2")
    public DataSource initDataSourceDb2() {
        DruidDataSource dataSource = initDruidDataSource();
        dataSource.setUrl(urlDb2);
        dataSource.setUsername(usernameDb2);
        dataSource.setPassword(passwordDb2);
        return dataSource;
    }
    // 这里我用了阿里的 Druid Maven依赖 习惯什么用什么 当然现在Druid 已经不维护了。
    public DruidDataSource initDruidDataSource() {
        return new DruidDataSource();
    }
}

下面配置MyBatis的工厂对象DataSourceMapperConfigDB1

package com.zts.demo.config;


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 org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.zts.demo.mapperDb1", sqlSessionFactoryRef = "SqlSessionFactoryDb1")
public class DataSourceMapperConfigDB1 {

    @Bean(name = "SqlSessionFactoryDb1")
    @Primary
    public SqlSessionFactory initSqlSessionFactoryDb1(@Qualifier("DataSourceDb1") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mappers/*.xml"));
        return sessionFactoryBean.getObject();
    }

    @Bean(value = "SqlSessionTemplateDb1")
    @Primary
    public SqlSessionTemplate initSqlSessionTemplateDb1(@Qualifier("SqlSessionFactoryDb1") SqlSessionFactory sqlSessionFactory) {
        SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSessionTemplate;
    }

    @Bean(value = "TransactionManagerDb1")
    @Primary
    public PlatformTransactionManager initPlatformTransactionManager(@Qualifier("DataSourceDb1") DataSource dataSource) {
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }

}

下面配置MyBatis的工厂对象DataSourceMapperConfigDB2 再多几个数据源也是一样的 一样的模板。

package com.zts.demo.config;

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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.zts.demo.mapperDb2", sqlSessionFactoryRef = "SqlSessionFactoryDb2")
public class DataSourceMapperConfigDb2 {

    @Bean("SqlSessionFactoryDb2")
    public SqlSessionFactory initSqlSessionFactoryDb2(@Qualifier("DataSourceDb2") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mappers/*.xml"));
        return sessionFactoryBean.getObject();
    }

    @Bean("SqlSessionTemplateDb2")
    public SqlSessionTemplate initSqlSessionTemplateDb2(@Qualifier("SqlSessionFactoryDb2") SqlSessionFactory sqlSessionFactory) {
        SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sessionTemplate;
    }

    @Bean("TransactionManagerDb2")
    public PlatformTransactionManager initPlatformTransactionManagerDb2(@Qualifier("DataSourceDb2") DataSource dataSource) {
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
        return transactionManager;
    }
}

剩下的该怎么写怎么写 创建两个 存放Dao包 在resouce 文件下创建一个mappers 包 把你的 .xml文件全放里面就行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值