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这块,在之前的的一篇文章中已经讲述了 ...
随机推荐
- 使用with语句优化pymysql的操作
一.with语句的好处 with语句的好处在于,它可以自动帮我们释放上下文,就比如文件句柄的操作,如果你不使用with语句操作,你要先open一个文件句柄,使用完毕后要close这个文件句柄,而使用w ...
- jQUERY中的属性获取
jQuery获取Select选择的Text和Value:语法解释:1. $("#select_id").change(function(){//code...}); //为Se ...
- 2.8 hashlib模块
- python 10道面试陷阱题目
- 跟我一起写Makefile
跟我一起写Makefile 来源 https://blog.csdn.net/fhaitao900310/article/details/82657193 陈皓 (博客地址:http://blog. ...
- MongoDB用户及数据库管理命令
1.用户管理: 连接数据库: mongo 127.0.0.1:27017 切换到admin数据库: > use admin 创建管理员账户: db.createUser( { user: &qu ...
- 寒冬之下,移动开发没人要了? 浅谈 iOS 开发者该 何去何从?
前言: 作者 | 梅梅 文章来源 CSDN 对于移动互联网而言,2018 年像是球场上的一声裁判哨.哨声响起,高潮迭起的上半场结束.本该再创辉煌的下半场,还没开赛却被告之:规则改变.场地收缩.教 ...
- java入门--学习地址
发现java很多地方都在用,纠结很久该学python还是java. 目前先已python为主,java可以有初步了解能看懂代码就行. --------------------------------- ...
- 第四届CCCC团体程序设计天梯赛 后记
一不小心又翻车了,第二次痛失200分 1.开局7分钟A了L2-3,一看榜已经有七个大兄弟排在前面了,翻车 * 1 2.把L1-3 A了18分,留了两分准备抢顽强拼搏奖,最后五秒钟把题过了,万万没想到还 ...
- consul kv使用介绍
有两种方法与Consul K/V交互的方式 HTTP API Consul KV CLI WEB访问 命令行使用 帮助命令:consul kv --help 列出所有kv:consul kv get ...