Mybatis配置多数据源

mybatis多数据源

相关代码如下:
application.properties:

#spring.datasource.username=root
#spring.datasource.password=12345
#spring.datasource.jdbcUrl=jdbc:mysql://localhost:3306/test01?userUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
#默认的数据源配置如上,但是现在需要配置多数据源,所以需要自定义配置数据源,如下配置多数据源参数,默认是不会被spring识别的,因为下面的key都是自定义的,所以需要自己配置DataSource和MybatisConfig(注入SqlSessionFactory  和 SqlSessionTemplate)

spring.datasource.one.username=root
spring.datasource.one.password=12345
spring.datasource.one.jdbcUrl=jdbc:mysql://localhost:3306/test01?userUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

spring.datasource.two.username=root
spring.datasource.two.password=12345
spring.datasource.two.jdbcUrl=jdbc:mysql://localhost:3306/test02?userUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

DataSourceConfig:

package com.cls.mybatismulti.config;

import com.zaxxer.hikari.HikariDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * @author by CLS
 * @Classname DataSourceConfig
 * @Description TODO
 * @Date 2021/5/16/0016 22:19:19
 */
@Configuration
public class DataSourceConfig {

    @Bean
//    指定数据源是依据配置文件中的那些参数来构建的:依据配置文件中 spring.datasource.one前缀开头的属性构建数据源,
//    现在注入了两个 HikariDataSource 对象,然后在创建MybaitsConfig配置两个mybatis实例
    @ConfigurationProperties(prefix = "spring.datasource.one")
    DataSource  dsOne(){
        return new HikariDataSource();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.two")
    DataSource  dsTwo(){
        return new HikariDataSource();
    }

}

MyBatisConfigOne:

package com.cls.mybatismulti.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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * @author by CLS
 * @Classname MyBatisConfigOne
 * @Description TODO
 * @Date 2021/5/16/0016 22:22:03
 */

/**
 * 配置SqlSessionFactory  和 SqlSessionTemplate
 */
@Configuration
//因为有两个数据源,需要扫描不一样的地方 所以需要配置mapperscan
@MapperScan(basePackages = "com.cls.mybatismulti.mapper1",
            sqlSessionFactoryRef = "sqlSessionFactory1",
            sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MyBatisConfigOne {

    @Autowired
    //这里有两个DataSource实例,所以需要指定
    @Qualifier("dsOne")
    DataSource ds;

    @Bean
    SqlSessionFactory sqlSessionFactory1(){
        SqlSessionFactory sqlSessionFactory = null;
        try {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(ds);
            sqlSessionFactory = bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sqlSessionFactory;
    }

    @Bean
    SqlSessionTemplate sqlSessionTemplate1(){
        return new SqlSessionTemplate(sqlSessionFactory1());
    }

}

MyBatisConfigTwo:

package com.cls.mybatismulti.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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * @author by CLS
 * @Classname MyBatisConfigOne
 * @Description TODO
 * @Date 2021/5/16/0016 22:22:03
 */
@Configuration
@MapperScan(basePackages = "com.cls.mybatismulti.mapper2",
            sqlSessionFactoryRef = "sqlSessionFactory2",
            sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MyBatisConfigTwo {

    @Autowired
    @Qualifier("dsTwo")
    DataSource ds;

    @Bean
    SqlSessionFactory sqlSessionFactory2(){
        SqlSessionFactory sqlSessionFactory = null;
        try {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(ds);
            sqlSessionFactory = bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sqlSessionFactory;
    }

    @Bean
    SqlSessionTemplate sqlSessionTemplate2(){
        return new SqlSessionTemplate(sqlSessionFactory2());
    }

}

测试:

package com.cls.mybatismulti;

import com.cls.mybatismulti.mapper1.UserMapper1;
import com.cls.mybatismulti.mapper2.UserMapper2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class MybatismultiApplicationTests {

    @Autowired
    UserMapper1 userMapper1;

    @Autowired
    UserMapper2 userMapper2;
    @Test
    void contextLoads() {
        System.out.println("userMapper1.getAllUsers() = " + userMapper1.getAllUsers());
        System.out.println("userMapper2.getAllUsers() = " + userMapper2.getAllUsers());
    }

}

目录结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ryxEfiT2-1621293444353)(en-resource://database/1097:1)]

测试:

package com.cls.mybatismulti;

import com.cls.mybatismulti.mapper1.UserMapper1;
import com.cls.mybatismulti.mapper2.UserMapper2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class MybatismultiApplicationTests {

    @Autowired
    UserMapper1 userMapper1;

    @Autowired
    UserMapper2 userMapper2;
    @Test
    void contextLoads() {
        System.out.println("userMapper1.getAllUsers() = " + userMapper1.getAllUsers());
        System.out.println("userMapper2.getAllUsers() = " + userMapper2.getAllUsers());
    }

}

结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DOmTuzUc-1621293444354)(en-resource://database/1099:0)]

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值