Springboot + Mybatis,数据库多数据源配置项目Demo【源码下载】

JSON 2018-05-01 22:45:56 19637

由于要做复杂的数据迁移,直接  Mysql  数据库中用  sql  做迁移,难度太大,  SQL  操作起来很复杂,而且也不现实。

为了可以让同学们可以直接使用,在  Springboot  结合  Mybatis  同时加入了我以往的  Freemarker  ,作为View层渲染。

一、Springboot + Mybatis 多数据源配置

1.Springboot.yml配置文件

server:
  port: 9281

#spring:
#  profiles:
#    active: dev


#数据库1
datasource1:
  url: jdbc:mysql://localhost:3306/ios666_history?useSSL=false&useUnicode=true
  username: root
  password:
  driver-class-name: com.mysql.jdbc.Driver
#数据库2
datasource2:
  url: jdbc:mysql://localhost:3306/av8d?useSSL=false&useUnicode=true
  username: root
  password:
  driver-class-name: com.mysql.jdbc.Driver

2.SpringbootApplication 禁止加载自身对DataSource的扫描

@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class
})
public class DatasourceApplication {

	public static void main(String[] args) {
		SpringApplication.run(DatasourceApplication.class, args);
	}
}

3.DataSourceConfig 对 Springboot.yml 读取

@Configuration
public class DataSourceConfig {

    @Bean(name = "dbOneDataSource")
    @Primary
    @ConfigurationProperties(prefix = "datasource1") // application.yml 中对应属性的前缀
    public DataSource dbOneDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "dbTwoDataSource")
    @ConfigurationProperties(prefix = "datasource2") // application.yml 中对应属性的前缀
    public DataSource dbTwoDataSource() {

        return DataSourceBuilder.create().build();
    }
}

这里创建了2个Bean,由dbOneDataSource 和 dbTwoDataSource 读取并创建数据源。

二、数据源的创建 

如果有多个就直接创建多个,下面说说 SqlSessionFactory && SqlSessionTemplate 创建 。为了方便管理,我用内部类去解决。

package com.sojson.datasource.config;

import lombok.extern.slf4j.Slf4j;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.annotation.Resource;
import javax.sql.DataSource;
/**
 *
 * 开发公司:SOJSON在线工具 <p>
 * 版权所有:© www.sojson.com<p>
 * 博客地址:https://www.sojson.com/blog/  <p>
 * <p>
 * 说明:<br/>
 * 
 *  如果有多个就直接创建多个,SqlSessionFactory && SqlSessionTemplate 创建
 * <p>
 *
 * 区分 责任人 日期    <br/>
 * 创建 周柏成  2018年05月01日22:33:18  <br/>
 *
 * @author zhou-baicheng
 * @email  so@sojson.com
 * @version 1.0<br/>
 *
 */
@Slf4j
public class MybatisConfig {


    /**
     * 第一个数据库 SqlSessionFactory && SqlSessionTemplate 创建
     */
    @Configuration
    @MapperScan(basePackages = {"com.sojson.datasource.one.mapper"},
            sqlSessionFactoryRef = "sqlSessionFactoryOne",
            sqlSessionTemplateRef = "sqlSessionTemplateOne")
    public static  class DBOne{
        @Resource
        DataSource dbOneDataSource;


        @Bean
        public SqlSessionFactory sqlSessionFactoryOne() throws Exception {
            log.info("sqlSessionFactoryOne 创建成功。");
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dbOneDataSource);
            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/one/*.xml"));
            return factoryBean.getObject();

        }

        @Bean
        public SqlSessionTemplate sqlSessionTemplateOne() throws Exception {
            SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryOne()); // 使用上面配置的Factory
            return template;
        }
    }

    /**
     * 第二个数据库 SqlSessionFactory && SqlSessionTemplate 创建
     */
    @Configuration
    @MapperScan(basePackages = {"com.sojson.datasource.two.mapper"},
            sqlSessionFactoryRef = "sqlSessionFactoryTwo",
            sqlSessionTemplateRef ="sqlSessionTemplateTwo" )
    public static class DBTwo{
        @Resource
        DataSource dbTwoDataSource;


        @Bean
        public SqlSessionFactory sqlSessionFactoryTwo() throws Exception {
            log.info("sqlSessionFactoryTwo 创建成功。");
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dbTwoDataSource);
            、、
            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/two/*.xml"));
            return factoryBean.getObject();

        }

        @Bean
        public SqlSessionTemplate sqlSessionTemplateTwo() throws Exception {
            SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryTwo()); // 使用上面配置的Factory
            return template;
        }
    }
}


这里要详细说明的一下,因为创建了2套的SqlSessionFactory && SqlSessionTemplate,那怎么来区分或者说怎么分配数据源呢?

通过注释 :basePackages = {"com.sojson.datasource.one.mapper"}来定义第一个数据源 SqlSessionFactory 的mapper目录。

通过注释 :basePackages = {"com.sojson.datasource.two.mapper"}来定义第二个数据源 SqlSessionFactory 的mapper目录。

三、多数据源测试

package com.sojson.datasource.web.controller;


import com.sojson.datasource.common.model.Stock;
import com.sojson.datasource.one.mapper.OneStockMapper;
import com.sojson.datasource.two.mapper.TwoStockMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RequestMapping("api")
@RestController
public class IndexController {

    @Autowired
    OneStockMapper oneStockMapper;
    @Autowired
    TwoStockMapper twoStockMapper;



    @RequestMapping("")
    public Map<String,Object> index(){
        Map<String,Object> result = new HashMap<>();
        //第一个数据源
        Stock entity = oneStockMapper.selectByPrimaryKey(1);
        //第二个数据查询
        Stock twoEntity = twoStockMapper.selectByPrimaryKey(1);

        result.put("entity",entity);
        result.put("twoEntity",twoEntity);

        return result;
    }
}

代码已经开源提交到gitee上,地址为:https://gitee.com/jsonla/sojson.datasource.git

有问题加群交流。

版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/301.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Druid数据库配置详细介绍。网上一团糟。
MySQL数据库表怎么锁定
MySQL数据库为用户设密码,Mysql修改密码。Mysql忘记密码解决方法
MySql数据库优化注意的四个细节(方法)
Springboot + Freemarker 集成配置
Springboot + Mybatis +Maven 自动生成 Mapper.xml,Entity,Dao。 generator 配置
MySQL数据库存储过程字符集问题,乱码的解决办法
Springboot 集成Aliyun MQ消息队列,Aliyun 消息队列配置及代码实现
Shiro教程(十)Shiro 权限动态加配置精细讲解
天气免费API接口,天气API接口请求讲解及源码下载
最新文章
Python print() 函数 30
PHP if/else/elseif 语句 81
HTML5 Canvas弧线教程 74
Java赋值运算符 118
XML内部实体和外部实体 217
Java面向对象编程概念 177
PHP回显语句 128
Linux—文件树 142
C语言while循环和do while循环 150
Python元组剖析 214
最热文章
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 682842
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 674741
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 603115
免费天气API,天气JSON API,不限次数获取十五天的天气预报 581455
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 553169
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 509466
Elasticsearch教程(四) elasticsearch head 插件安装和使用 480074
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 264931
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 244332
Elasticsearch教程(一),全程直播(小白级别) 225661
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...