SpringBoot+Dynamic多数据源动态切换
最近做了个小模块,需求就是项目同时读取三个数据库,操作数据。并不是分库分表,只用定时跑,不需要对外提供接口。
技术选型:SpringBoot + Mybatis Plus(Mybatis) + Dynamic
1. 用MyBatis Plus 生成mapper、xml、service,生成方法。
2. 引用核心jar包
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.4.2</version>
</dependency>
3. yml文件配置(有需要连接池配置的可以自己加)
spring:
datasource:
#配置hikari连接池
hikari:
minimum-idle: 4
maximum-pool-size: 16
connection-timeout: 10000
idle-timeout: 30000
connection-init-sql: set names utf8mb4
#动态数据源配置
dynamic:
#主数据源
primary: business
datasource:
#数据源1
business:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_business?useUnicode=true&characterEncoding=utf-8
username: ****
password: ****
#数据源2
user:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_user?useUnicode=true&characterEncoding=utf-8
username: ****
password: ****
#数据源3
order:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_order?useUnicode=true&characterEncoding=utf-8
username: ****
password: ****
4. 在Service层加DS注解(注意:这个注解要加到mapper.xml文件对应的dao接口层,会报加载失败异常)
@Service
@DS(value = "user")
public class UserServiceImpl extends ServiceImpl<UserMapper, UserInfo>
implements UserService { } bussines, order...库配置是一样的
5. 启动类注解
@MapperScan("com.**.dao")
@ComponentScan(value = "com.**")
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
6. 启动项目,看日志输出了如下信息,表示配置成功:
2019-12-16 20:50:52.565 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : business - Starting...
2019-12-16 20:50:53.611 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : business - Start completed.
2019-12-16 20:50:53.611 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : user - Starting...
2019-12-16 20:50:54.100 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : user - Start completed.
2019-12-16 20:50:54.100 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : order - Starting...
2019-12-16 20:50:54.607 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : order - Start completed.
2019-12-16 20:50:54.608 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 初始共加载 3 个数据源
2019-12-16 20:50:54.608 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 动态数据源-加载 business 成功
2019-12-16 20:50:54.608 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 动态数据源-加载 user 成功
2019-12-16 20:50:54.608 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 动态数据源-加载 order 成功
2019-12-16 20:50:54.609 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 当前的默认数据源是单数据源,数据源名为 business
SpringBoot+Dynamic多数据源动态切换的更多相关文章
- SpringBoot之多数据源动态切换数据源
原文:https://www.jianshu.com/p/cac4759b2684 实现 1.建库建表 首先,我们在本地新建三个数据库名分别为master,slave1,slave2,我们的目前就是写 ...
- springboot多数据源动态切换和自定义mybatis分页插件
1.配置多数据源 增加druid依赖 完整pom文件 数据源配置文件 route.datasource.driver-class-name= com.mysql.jdbc.Driver route.d ...
- Springboot多数据源配置--数据源动态切换
在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基 ...
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源方法
一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基 ...
- Spring多数据源动态切换
title: Spring多数据源动态切换 date: 2019-11-27 categories: Java Spring tags: 数据源 typora-root-url: ...... --- ...
- mybatis 多数据源动态切换
笔者主要从事c#开发,近期因为项目需要,搭建了一套spring-cloud微服务框架,集成了eureka服务注册中心. gateway网关过滤.admin服务监控.auth授权体系验证,集成了redi ...
- 实战:Spring AOP实现多数据源动态切换
需求背景 去年底,公司项目有一个需求中有个接口需要用到平台.算法.大数据等三个不同数据库的数据进行计算.组装以及最后的展示,当时这个需求是另一个老同事在做,我只是负责自己的部分. 直到今年回来了,这个 ...
- SpringBoot多数据源动态切换数据源
1.配置多数据源 spring: datasource: master: password: erp_test@abc url: jdbc:mysql://127.0.0.1:3306/M201911 ...
随机推荐
- Flask——实现上传功能
1.实例 #!-*-coding=utf-8-*- # from flask import Flask # # app = Flask(__name__) # # # @app.route('/') ...
- 基层教师 - CMD命令之net命令与IPC连接
1)建立空连接: net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格) 2)建立非空连接: net use \ ...
- 03 Django模型层: 常用(非常用)字段和参数
Django模型层: 常用(非常用)字段和参数 1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为i ...
- 智联家园-四大人工智能虚拟形象首秀MV
2020 世界人工智能大会云端峰会在上海举行,由微软小冰作曲并携手其他 AI 演唱的 2020 世界人工智能大会云端峰会主题曲<智联家园> 今天正式发布,同时这也是小冰上海音乐学院毕业后的 ...
- web 部署专题(二):gunicore 并发部署(用gunicorn+gevent启动Flask项目)
转自:https://blog.csdn.net/dutsoft/article/details/51452598 Flask,webpy,Django都带着 WSGI server,当然性能都不好, ...
- python 之 编码
本节内容 编码回顾 编码转换 Python的bytes类型 编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有 ...
- DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)
前言 曲面细分是Direct3D 11带来的其中一项重要的新功能.它引入了两个可编程着色器阶段以及一个固定的镶嵌处理过程.简单来说,曲面细分技术可以将几何体细分为更小的三角形,并以某种方式把这些新生成 ...
- JavaScript 基础 学习 (四)
JavaScript 基础 学习 (四) 解绑事件 dom级 事件解绑 元素.on事件类型 = null 因为赋值的关系,所以给事件赋值为 null 的时候 事件触发的时候,就没有事件处理 ...
- HTML学习分享(一)
HTML学习小结(一) 1.css的全称是什么? 2.样式表的组成 3.浏览器读取编译css的顺序? (1)HTML基本选择器 1.通配符选择器 * { margin: 0; padding: 0; ...
- [译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01
这是系列文章中的第一篇:使用GraphvizOnline可视化ASP.NETCore3.0终结点.. 第1部分-使用DOT语言来可视化你的ASP.NETCore3.0终结点(本文) 第2部分-向ASP ...