前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis+springboot+druid多数据源配置

mybatis+springboot+druid多数据源配置

作者头像
gfu
发布2019-10-22 22:56:30
2.5K1
发布2019-10-22 22:56:30
举报
文章被收录于专栏:gfugfu

博主有话说:现在数据库中间件基本取代了多数据源配置,大家可以去学习一下MyCat以及SharingSphere,有空的时候和大家分享一波。这次主要介绍的是一个项目中多数据源的配置,可以达到读写分离的效果,加上aop,简直就是一个注解无缝插入,有空也会上传aop的代码。大家一起学习一起进步。

整体梳理过程

  1. 加上注解
  2. application.properties/yml中配置
  3. 注入datasource和SqlsessionTemplate,并配置bean名称和@MapperScan
  4. 写自己的mapper
  5. 单测

0.注意点

加上这段annotation@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class})

1.在application.properties中配置如下

代码语言:javascript
复制
spring.datasource.gfu00.driver-class-name= ****
spring.datasource.gfu00.url= ****
spring.datasource.gfu00.username= ****
spring.datasource.gfu00.password= ****

spring.datasource.gfu01.driver-class-name= ****
spring.datasource.gfu01.url = ****
spring.datasource.gfu01.username =  ****
spring.datasource.gfu01.password = ****

2.配置多个datasource,并用druid创建datasource。此处也可用DataSourceBuilder.create().build()

代码语言:javascript
复制
package org.sjframework.learn.mybatis.datasource;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * multi-datasource config
 *
 * @author 719383495@qq.com |719383495qq@gmail.com |gfu
 * @date 2019/10/18
 */
@Configuration
public class DataSourceConfig {

    @Bean("gfu00")
    @ConfigurationProperties(prefix = "spring.datasource.gfu00")
    public DataSource gfu00() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean("gfu01")
    @ConfigurationProperties(prefix = "spring.datasource.gfu01")
    public DataSource gfu01() {
        return DruidDataSourceBuilder.create().build();
    }

}

3.配置SqlSessionTemplate

3.1配置SqlSessionTemplate01
代码语言:javascript
复制
package org.sjframework.learn.mybatis.datasource;

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;


/**
 * gfu00
 *
 * @author 719383495@qq.com |719383495qq@gmail.com |gfu
 * @date 2019/10/18
 */

@Configuration
@MapperScan(basePackages = {"org.sjframework.learn.mybatis.dao"}, sqlSessionFactoryRef = "sqlSession00")
public class Gfu00Config {

    @Autowired
    @Qualifier("gfu00")
    private DataSource gfu00;

    @Bean
    public SqlSessionFactory sqlSession00() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(gfu00); 
        return factoryBean.getObject();
    }

    @Bean("sessionTemplate00")
    public SqlSessionTemplate sessionTemplate00() throws Exception {
        return new SqlSessionTemplate(sqlSession00());
    }

}
3.2配置SqlSessionTemplate01
代码语言:javascript
复制
package org.sjframework.learn.mybatis.datasource;

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;


/**
 * gfu00
 *
 * @author 719383495@qq.com |719383495qq@gmail.com |gfu
 * @date 2019/10/18
 */

@Configuration
@MapperScan(basePackages = {"org.sjframework.learn.mybatis.read"}, sqlSessionFactoryRef = "sqlSession01")
public class Gfu01Config {

    @Autowired
    @Qualifier("gfu01")
    private DataSource gfu01;

    @Bean
    public SqlSessionFactory sqlSession01() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(gfu01);
        return factoryBean.getObject();
    }

    @Bean("sessionTemplate01")
    public SqlSessionTemplate sessionTemplate01() throws Exception {
        return new SqlSessionTemplate(sqlSession01());
    }

}

4.测试类

代码语言:javascript
复制
package org.sjframework.learn.mybatis;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.SqlSessionTemplate;
import org.sjframework.learn.mybatis.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * mybatis test
 *
 * @author 719383495@qq.com |719383495qq@gmail.com |gfu
 * @date 2019/10/17
 */
@RunWith(SpringRunner.class)
@SpringBootTest
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class})
public class MultiDataSourceTest {

    @Autowired
    UserDao userDao;

    @Autowired
    @Qualifier("sessionTemplate00")
    SqlSessionTemplate sessionTemplate00;

    @Autowired
    @Qualifier("sessionTemplate01")
    SqlSessionTemplate sessionTemplate01;

    @Test
    public void loadContext() {
        Page<Map<String, String>> page = new Page<>(2, 100);
        
        Object userId00 = sessionTemplate00.selectOne("org.sjframework.learn.mybatis.dao.UserDao.multiDataSource", "userId");
        Object userId01 = sessionTemplate01.selectOne("org.sjframework.learn.mybatis.read.UserDaoRead.multiDataSource", "userId");

        System.out.println(userId00);
    }

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.10.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0.注意点
  • 1.在application.properties中配置如下
  • 2.配置多个datasource,并用druid创建datasource。此处也可用DataSourceBuilder.create().build()
  • 3.配置SqlSessionTemplate
    • 3.1配置SqlSessionTemplate01
      • 3.2配置SqlSessionTemplate01
      • 4.测试类
      相关产品与服务
      消息队列 TDMQ
      消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档