基于springboot和mybatis的多数据源配置

1、首先新建一个springboot项目,项目结构如下:

引入mybatis和mysql依赖:

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>

2、建立两个数据源的测试数据库及表,这里为了更好的验证,选择本地数据库为第一个数据源,服务器远端数据库作为第二个数据源

数据源1的数据在上图可查看到,数据源2的表数据如下:

3、使用自动生成工具分别生成两个数据源的mapper接口、xml文件、pojo,并放进不同的地方如下:

4、在yml配置文件中添加数据源信息
首先新建一个配置文件application-local.yml,添加数据库信息(之所以独立出来,考虑主配置文件会掺杂很多其他配置)

datasource:data1: #数据源1host: localhostusername: rootpassword: 123456data2: #数据源2host: ***username: ***password: ***

主配置文件application.yml里信息如下:

spring:profiles:active: local #引入application-local.yml#多数据源配置datasource1:url: jdbc:mysql://${datasource.data1.host}/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8username: ${datasource.data1.username}password: ${datasource.data1.password}datasource2:url: jdbc:mysql://${datasource.data2.host}/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8username: ${datasource.data2.username}password: ${datasource.data2.password}

5、编写数据源配置类

package com.example.mydemo.config;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.sql.DataSource;/*** @author: ChenGang* @create: 2020-06-23 19:23* @description 数据源配置类**/
@Configuration
public class DataSourceConfig {/*********************************** 数据源1属性读取 **********************************///数据源1配置文件读取@Primary@Bean(name = "dataSourceProperties1")@ConfigurationProperties(prefix = "spring.datasource1")public DataSourceProperties dataSourceProperties1(){return new DataSourceProperties();}//配置数据源1@Primary@Bean(name = "dataSource1")public DataSource dataSource1(@Qualifier("dataSourceProperties1") DataSourceProperties dataSourceProperties){return dataSourceProperties.initializeDataSourceBuilder().build();}/*********************************** 数据源2属性读取 **********************************///数据源2配置文件读取@Bean(name = "dataSourceProperties2")@ConfigurationProperties(prefix = "spring.datasource2")public DataSourceProperties dataSourceProperties2(){return new DataSourceProperties();}//配置数据源2@Bean(name = "dataSource2")public DataSource dataSource2(@Qualifier("dataSourceProperties2") DataSourceProperties dataSourceProperties){return dataSourceProperties.initializeDataSourceBuilder().build();}
}

6、编写mybatis配置类
*数据源1的mybatis配置====>*

package com.example.mydemo.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 javax.sql.DataSource;/*** @author: ChenGang* @create: 2020-06-23 19:37* @description 数据源1的mybatis配置类**/
@Configuration
@MapperScan(basePackages = "com.example.mydemo.mapper.data1",sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MybatisConfig1 {//配置sqlSession工厂@Primary@Bean(name = "sqlSessionFactory1")public SqlSessionFactory mainSqlSessionFactory1(@Qualifier("dataSource1") DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();//设置数据源sqlSessionFactory.setDataSource(dataSource);//设置mapper映射文件sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/data1/*.xml"));return sqlSessionFactory.getObject();}//配置sqlSession模板引擎@Primary@Bean(name = "sqlSessionTemplate1")public SqlSessionTemplate sqlSessionTemplate1(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}

*数据源2的mybatis配置====>*

package com.example.mydemo.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 javax.sql.DataSource;/*** @author: ChenGang* @create: 2020-06-23 19:37* @description 数据源1的mybatis配置类**/
@Configuration
@MapperScan(basePackages = "com.example.mydemo.mapper.data2",sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MybatisConfig2 {//配置sqlSession工厂@Primary@Bean(name = "sqlSessionFactory2")public SqlSessionFactory mainSqlSessionFactory2(@Qualifier("dataSource2") DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();//设置数据源sqlSessionFactory.setDataSource(dataSource);//设置mapper映射文件sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/data2/*.xml"));return sqlSessionFactory.getObject();}//配置sqlSession模板引擎@Primary@Bean(name = "sqlSessionTemplate2")public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}

7、数据库连接池配置类

package com.example.mydemo.config;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;/*** @author: ChenGang* @create: 2020/6/23:20:58* @description: 数据库连接池配置**/
@Configuration
public class JdbcTemplateDataSourceConfig {//JdbcTemplate主数据源ds1数据源@Bean(name = "jdbcTemplate1")public JdbcTemplate jdbcTemplate1(@Qualifier("dataSource1") DataSource dataSource) {return new JdbcTemplate(dataSource);}//JdbcTemplate第二个ds2数据源@Bean(name = "jdbcTemplate2")public JdbcTemplate jdbcTemplate2(@Qualifier("dataSource2") DataSource dataSource) {return new JdbcTemplate(dataSource);}
}

8、编写测试类,分别查询两张表数据

package com.example.mydemo;import com.example.mydemo.mapper.data1.Test1Mapper;
import com.example.mydemo.mapper.data2.Test2Mapper;
import com.example.mydemo.pojo.data1.Test1;
import com.example.mydemo.pojo.data2.Test2;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;
import java.util.List;@SpringBootTest
class MydemoApplicationTests {@ResourceTest1Mapper test1Mapper;@ResourceTest2Mapper test2Mapper;@Testvoid contextLoads() {Test1 test1 = test1Mapper.selectByPrimaryKey(1);System.out.println("数据源1的数据:"+test1);List<Test2> test2s = test2Mapper.findAll();System.out.println("数据源2的数据:"+test2s.get(0));}}

打印结果如下:

可以看见,当使用test1Mapper做查询时链接数据源1,获取的数据源1的数据;当使用test2Mapper做查询时链接数据源2,获取的数据源2的数据,多数据源的配置就成功啦!

如有不对,请留言指正!下期请见多数据源的事务配置。

基于springboot和mybatis的多数据源配置相关推荐

  1. 基于 Springboot 和 Mybatis 的后台管理系统 BootD

    源码名称:基于 Springboot 和 Mybatis 的后台管理系统 BootD 下载地址:https://www.chtml.cn/product/show/10867 项目介绍 面向学习型的开 ...

  2. 基于springboot+thymeleaf+mybatis的员工管理系统 —— 登录与注册

    员工管理系统 - 登录与注册功能 创建项目 pom.xml 数据库表设计和环境准备 建表SQL application.properties 用户注册与登录功能 entity dao service ...

  3. 搭建eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo

    前言:我这里搭建好eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo.新手快速上手直接看demo. 最后处提供完整高质量de ...

  4. 基于springboot+thymeleaf+mybatis的员工管理系统 —— 增删改查

    员工管理系统 - 增删改查 entity 查询所有功能 查询所有的页面 emplist.html 保存员工 保存员工的页面 addEmp.html 删除员工 修改员工 根据id查询员工 修改员工信息 ...

  5. 基于Springboot和mybatis在线考试系统的设计与实现

    基于Springboot和mybatis在线考试系统的设计与实现 源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 本系统实现了 考试系统的主要功能, ...

  6. 基于Springboot+Vue+Mybatis的小说阅读管理系统

    一.基于Springboot+Vue+Mybatis的小说阅读管理系统 此项目为基于Springboot+Vue+Mybatis的小说阅读管理系统,主要分为用户端和管理端两个模块. 用户端主要支撑登录 ...

  7. 基于SpringBoot集合Mybatis的增删改查实现,通过postman测试(1)

    本篇介绍基于SpringBoot和Mybatis+mysql+maven的简单实现增删改查的案例,详细介绍如下, 代码地址附上:https://git.lug.ustc.edu.cn/nantian_ ...

  8. springBoot+mybatis实现多数据源配置

    第一步,pom.xml(因为这个项目测试多个知识点jar包引得比较多,比较乱,根据个人需求删除) <?xml version="1.0" encoding="UTF ...

  9. 基于SpringBoot、MyBatis-plus实现双数据源定时同步

    1.项目目录结构 2.双数据源配置 在Application上添加注解,不自动加载默认数据源 @SpringBootApplication(exclude = {DataSourceAutoConfi ...

最新文章

  1. 20 Java程序员面试宝典视频课程之HTML5新标签、功能
  2. 华硕笑傲珠峰,网络口碑营销巧打奥运擦边球
  3. 正在研究d2010的dcu格式
  4. 回溯算法的题目,这样做,秒杀!!
  5. linux查看docker使用率,Linux系统非Docker环境如何限制CPU使用率
  6. 2021-11-18Collections
  7. DDD理论学习系列(5)-- 统一建模语言
  8. (需求实战_进阶_04)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试
  9. 无法打开物理文件 XXX.mdf,操作系统错误 5.5(拒绝访问) 的解决办法
  10. 计算机课程学习小结,计算机课程学习心得5篇___.docx
  11. PyCharm Python迁移项目
  12. Tennis Game CodeForces - 496D(唯一分解定理,费马大定理)
  13. java自动化学习笔记
  14. linux使用中的问题 ---(Cannot find a valid baseurl for repo: base)
  15. heidisql与 MySQL区别,heidisql怎么使用 MySQL可视化工具heidisql安装使用教程
  16. 学画画软件app推荐_5岁宝宝画画自学app推荐 快给宝宝找个合适的画画启蒙软件吧...
  17. MEMS惯性导航单元的标定与测试
  18. Android PackageInstaller:安装应用的应用,从三流Android外包到秒杀阿里P7
  19. mdf文件和ldf文件ndf是什么,怎么用?如何给SQL server添加数据文件?分离和附加数据库的操作
  20. 白话空间统计十九:热点分析(上)

热门文章

  1. IOS版微信新功能!朋友圈评论支持表情包
  2. HBase实战(6):使用Spark 2.2.1 直接操作HBASE 1.2.0数据库
  3. 【MyBatis系列7】原来SqlSession只是个甩手掌柜,真正干活的却是Executor等四大对象
  4. 自动识别技术初体验,8个RFID应用方案合集
  5. 交替性注意力_注意力
  6. Kerberoast
  7. Katalon Studio 自动化测试工具介绍
  8. 摆烂、挣扎、转型,共享充电宝失宠了?
  9. linux u盘新建文件夹加密,linux磁盘的加密保护以及u盘加密的方法
  10. 11.数据仓库搭建之DWS层搭建