SpringBoot Mybatis项目中的多数据源支持
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项目中的多数据源支持的更多相关文章
- SpringBoot Web项目中中如何使用Junit
Junit这种老技术,现在又拿出来说,不为别的,某种程度上来说,更是为了要说明它在项目中的重要性. 凭本人的感觉和经验来说,在项目中完全按标准都写Junit用例覆盖大部分业务代码的,应该不会超过一半. ...
- 在springboot 和 mybatis 项目中想要显示sql 语句进行调试
在springBoot+Mybatis日志显示SQL的执行情况的最简单方法就是在properties新增: logging.level.com.dy.springboot.server.mapper= ...
- Springboot+Mybatis AOP注解动态切换数据源
在开发中因需求在项目中需要实现多数据源(虽然项目框架是SpringCloud,但是因其中只是单独的查询操作,觉得没必要开发一个项目,所以采用多数据源来进行实现) 1.在配置文件中创建多个数据连接配置 ...
- 在Springboot + Mybaitis-plus 项目中利用Jackson实现json对java多态的(反)序列化
Jackson允许配置多态类型处理,当JSON面对的转换对象是一个接口.抽象类或者一个基类的时候,可以通过一定配置实现JSON的转换.在实际项目中,Controller层接收入参以及在Dao层将对象以 ...
- SpringBoot系列: SpringBoot Web项目中使用Shiro 之二
==================================Shiro 的加深理解:==================================1. Shiro 和 Spring 系组 ...
- 如何在spring-boot web项目中启用swagger
swagger的三个项目及其作用 我们打开swagger的官网,会发现有三个swagger相关的项目,它们分别是 swagger-editor 作用是通过写代码,生成文档描述(一个json文件或其他格 ...
- Vue编写的页面部署到springboot网站项目中出现页面加载不全问题
问题描述: 在用Vue脚手架 编写出一个页面之后, 部署到后台项目中, 因为做的是一个页面 按理来说 怎么都能够在服务器上运行 , 我也在自己的node环境测试 , 在同学的springboot上运行 ...
- Spring + SpringMVC + Mybatis项目中redis的配置及使用
maven文件 <!-- redis --> <dependency> <groupId>redis.clients</groupId> <art ...
- SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页
前言 本篇文章主要讲述的是SpringBoot整合Mybatis.Druid和PageHelper 并实现多数据源和分页.其中SpringBoot整合Mybatis这块,在之前的的一篇文章中已经讲述了 ...
随机推荐
- 存储引擎和表的操作(mysql中的数据类型、完整性约束)
一.存储引擎 .概念 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. 通过选择不同的技术 ...
- Swagger如何测试Date类型参数
问题 Swagger测试时,参数直接输入日期格式化后的类型,会报参数日期转换错误 :ConversionFailedException 解决 网上说在参数上添加注解 @DateTimeFormat(p ...
- mongoDB 文档操作_查
基本查询命令 find 查找复合条件的所有文档 命令 db.collection.find(query,field) 参数 query 查找条件 格式: {ssss:"xxx"}是 ...
- 我眼中的支持向量机(SVM)
看吴恩达支持向量机的学习视频,看了好几遍,才有一点的理解,梳理一下相关知识. (1)优化目标: 支持向量机也是属于监督学习算法,先从优化目标开始. 优化目标是从Logistics regressi ...
- go 数组 切片 字典 结构体
数组 ##数组的定义与赋值: 1. var num [3]int num = [3]int{1,2,3} 2. var num [3]int = [3]int {1,2,3} 3. num := [3 ...
- spring定时任务详解(@Scheduled注解)
Spring配置文件xmlns加入 xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocati ...
- ASP.NET WebApi 自带Json返回日期带T无法格式化的问题
WebApi自带json序列化对遇到时间日期字段的时候,到前端获取的格式总是为“ 2016-07-14T15:32:44”,中间总是会带一个T,显然不是很友好.先是偷懒在园子里边去找一些解决方案,尝试 ...
- [译]Ocelot - Configuration
原文 这里有一个配置的样例.配置主要有两个部分.一个是ReRoutes数组,另一个是GlobalConfiguration.ReRoute告诉Ocelot怎么处理上游的请求.Global config ...
- 013_RomanToInteger
#####solution1####faster#### def romanToInt(s): d={ 'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, ...
- 安装scala
Linux 环境 安装 下载的scala linux 压缩包放在目录 "/usr/scala “下 解压 tar -zxvf scala-2.11.8.tgz 再配置环境, 编辑文件 ”vi ...