1.概述

有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作。

有需要的同学可以下载 示例代码

项目结构如下:

2.建数据源

首先,我们建两个测试库 test1 test2,分别建两个表,分别添加一些测试数据

CREATE TABLE `groupidinfo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`groupId` varchar(255) DEFAULT NULL,
`version` varchar(255) DEFAULT NULL,
`cluster` varchar(255) DEFAULT NULL,
`timeout` int(11) DEFAULT NULL,
`retries` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

3.添加POM依赖

pom文件中添加项目依赖

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

4.配置文件

application.properties 文件中添加数据库连接配制

spring.datasource.db1.jdbc-url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.db1.username=root
spring.datasource.db1.password=123456
spring.datasource.db1.driver-class-name=com.mysql.jdbc.Driver spring.datasource.db2.jdbc-url=jdbc:mysql://127.0.0.1:3306/test1
spring.datasource.db2.username=root
spring.datasource.db2.password=123456
spring.datasource.db2.driverClassName=com.mysql.jdbc.Driver

5.配置文件

分别建立Db1DataSourceConfig,Db2DataSourceConfig,通过使用@MapperScan分别的两个数据源指定要扫描的Mapper类的包的路径,配置MapperLocations路径

@Configuration
@MapperScan(basePackages = "com.glory.study.dao.mapper.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class Db1DataSourceConfig {
@Bean(name = "db1Data")
@ConfigurationProperties(prefix = "spring.datasource.db1") // application.properteis中对应属性的前缀
@Primary
public DataSource Db1DataSourceConfig() {
return DataSourceBuilder.create().build();
} @Bean(name = "db1SqlSessionFactory")
@Primary
public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1Data") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/db1/*.xml"));
return bean.getObject();
} @Bean(name = "db1TransactionManager")
@Primary
public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1Data") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
} @Bean(name = "db1SqlSessionTemplate")
@Primary
public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}

6.添加数据库对应的实体类,并编写 Mybatis Mapper

直接写sql方式

@Mapper
@Repository
public interface GroupIdInfoDb1Mapper { @Select(" SELECT * FROM groupIdInfo WHERE id=#{id} limit 0,1;")
GroupIdInfo findById1(@Param("id") Integer id); }

Mapper XML方式

@Mapper
@Repository
public interface GroupIdInfoDb2Mapper { GroupIdInfo findById2(@Param("id") Integer id); }
<mapper namespace="com.glory.study.dao.mapper.db2.GroupIdInfoDb2Mapper">

    <select id="findById2" resultType="com.glory.study.model.GroupIdInfo">
SELECT * FROM groupIdInfo WHERE id=#{id} limit 0,1;
</select> </mapper>

7.编写调用Service

@Service
public class GroupIdInfoService { //数据源1
@Autowired
private GroupIdInfoDb1Mapper groupIdInfoDb1Mapper;
//数据源2
@Autowired
private GroupIdInfoDb2Mapper groupIdInfoDb2Mapper; public GroupIdInfo findById1(Integer id) throws Exception {
return groupIdInfoDb1Mapper.findById1(id);
} public GroupIdInfo findById2(Integer id) throws Exception {
return groupIdInfoDb2Mapper.findById2(id);
}
}

8.编写调用Controller

@RestController
public class DubboConfigController { @Autowired
private GroupIdInfoService groupIdInfoService; @RequestMapping("/dubboConfig1/{id}")
GroupIdInfo finddubboConfig1(@PathVariable("id") Integer id) throws Exception{
return groupIdInfoService.findById1(id);
} @RequestMapping("/dubboConfig2/{id}")
GroupIdInfo finddubboConfig2(@PathVariable("id") Integer id) throws Exception{
return groupIdInfoService.findById2(id);
} }

9.启动测试,成功

参考

http://www.ityouknow.com/springboot/2016/11/25/spring-boot-multi-mybatis.html

SpringBoot Mybatis项目中的多数据源支持的更多相关文章

  1. SpringBoot Web项目中中如何使用Junit

    Junit这种老技术,现在又拿出来说,不为别的,某种程度上来说,更是为了要说明它在项目中的重要性. 凭本人的感觉和经验来说,在项目中完全按标准都写Junit用例覆盖大部分业务代码的,应该不会超过一半. ...

  2. 在springboot 和 mybatis 项目中想要显示sql 语句进行调试

    在springBoot+Mybatis日志显示SQL的执行情况的最简单方法就是在properties新增: logging.level.com.dy.springboot.server.mapper= ...

  3. Springboot+Mybatis AOP注解动态切换数据源

    在开发中因需求在项目中需要实现多数据源(虽然项目框架是SpringCloud,但是因其中只是单独的查询操作,觉得没必要开发一个项目,所以采用多数据源来进行实现) 1.在配置文件中创建多个数据连接配置 ...

  4. 在Springboot + Mybaitis-plus 项目中利用Jackson实现json对java多态的(反)序列化

    Jackson允许配置多态类型处理,当JSON面对的转换对象是一个接口.抽象类或者一个基类的时候,可以通过一定配置实现JSON的转换.在实际项目中,Controller层接收入参以及在Dao层将对象以 ...

  5. SpringBoot系列: SpringBoot Web项目中使用Shiro 之二

    ==================================Shiro 的加深理解:==================================1. Shiro 和 Spring 系组 ...

  6. 如何在spring-boot web项目中启用swagger

    swagger的三个项目及其作用 我们打开swagger的官网,会发现有三个swagger相关的项目,它们分别是 swagger-editor 作用是通过写代码,生成文档描述(一个json文件或其他格 ...

  7. Vue编写的页面部署到springboot网站项目中出现页面加载不全问题

    问题描述: 在用Vue脚手架 编写出一个页面之后, 部署到后台项目中, 因为做的是一个页面 按理来说 怎么都能够在服务器上运行 , 我也在自己的node环境测试 , 在同学的springboot上运行 ...

  8. Spring + SpringMVC + Mybatis项目中redis的配置及使用

    maven文件 <!-- redis --> <dependency> <groupId>redis.clients</groupId> <art ...

  9. SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页

    前言 本篇文章主要讲述的是SpringBoot整合Mybatis.Druid和PageHelper 并实现多数据源和分页.其中SpringBoot整合Mybatis这块,在之前的的一篇文章中已经讲述了 ...

随机推荐

  1. Centos7修改时区

    设置时区同样, 在 CentOS 7 中, 引入了一个叫 timedatectl 的设置设置程序. 用法很简单: # timedatectl # 查看系统时间方面的各种状态 Local time: 四 ...

  2. Go语言的通道(2)-缓冲通道

    有缓冲的通道相比于无缓冲通道,多了一个缓存的功能,如下图描述的一样: 从图上可以明显看到和无缓冲通道的区别,无缓冲必须两个Goroutine都进入通道才能进行数据的交换,这个不用,如果数据有,直接就能 ...

  3. spring boot简单的小demo(适合于初学者)

    import com.example.demo2.com.example.dao.ShopDao; import com.example.demo2.com.example.entity.Shops; ...

  4. Magento2 API 服务合同设计模式 依赖注入 介绍

    公共接口和API 什么是公共界面? 一个公共接口是一组代码,第三方开发者可以调用,实现或构建一个 插件 .Magento保证在没有重大版本更改的情况下,此代码在后续版本中不会更改. 模块的公共接口 标 ...

  5. Ceph分布式存储(luminous)部署文档-ubuntu18-04

    Ceph分布式存储(luminous)部署文档 环境 ubuntu18.04 ceph version 12.2.7 luminous (stable) 三节点 配置如下 node1:1U,1G me ...

  6. 驱动调试(三)oops确定函数PC

    目录 驱动调试(三)oops确定函数PC 什么是oops 流程简述 代码仓库 模块例子分析 找到PC值 判断是否属于模块 查看符号表 找到模块 反汇编模块 内核例子分析 找到PC值 判断是否属于模块 ...

  7. Pandas系列(八)-筛选工具介绍

    内容目录 1. 字典式 get 访问 2. 属性访问 3. 切片操作 4. 通过数字筛选行和列 5. 通过名称筛选行和列 6. 布尔索引 7. isin 筛选 8. 通过Callable筛选 数据准备 ...

  8. Typora使用说明(记录总结)

    目录 区域元素 YAML FONT Matters 菜单 段落 标题 引注 序列 可选序列 代码块 数学块 表格 脚注 水平线 特征元素 链接 超链接 内链接 相关链 URLs 图片 斜体 加粗 删除 ...

  9. CSS三种样式

    CSS 指层叠样式表 (Cascading Style Sheets): 1 内联样式:无法复用,在元素style内写 ,很少使用: 2 内部样式:在head元素内style属性内写,此样式可以被当前 ...

  10. Windows系统下查看某一进程下所有线程的dos命令

    1.查看进程 pslist或 tasklist 注:若出现“pslist不是外部或内部命令,也不是可运行的程序....”,需要去TechNet官网下载psTools(链接https://technet ...