电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

springboot中mybatis多數據源動態切換實現

瀏覽:121日期:2023-02-23 14:01:13
目錄多數據源配置引入動態數據源路由實現動態數據源切換使用案例源碼

在開發中,動態數據源配置還是用的比較多的,比如在多數據源使用方面,又或者是在多個DB之間切換方面。這里給出一個動態數據源的配置方案,兩個DB均以mysql為例。

多數據源配置引入

mybatis和mysql在springboot中的引入這里就不在說了,不了解的可以參見springboot中mysql與mybatis的引入。

數據源配置如下:

datasource: master: type: com.alibaba.druid.pool.DruidDataSource jdbc-url: jdbc:mysql://127.0.0.1:3306/sbac_master?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true username: root password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver log: type: com.alibaba.druid.pool.DruidDataSource jdbc-url: jdbc:mysql://127.0.0.1:3306/sbac_log?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true username: root password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver

mybatis的配置引入如下:

mybatis: config-location: classpath:mybatis-config.xml mapper-locations: classpath:com/lazycece/sbac/mysql/data/dao/*/mapper/*.xml

這里已然使用的是springboot的自動配置功能配置mybatis信息,只是手動指定了數據源的。如下所示,指定了master和log兩個數據源,設置master為默認數據源:

@Configurationpublic class MultiDataSource { public static final String MASTER_DATA_SOURCE = 'masterDataSource'; public static final String LOG_DATA_SOURCE = 'logDataSource'; @Bean(name = MultiDataSource.MASTER_DATA_SOURCE) @ConfigurationProperties(prefix = 'datasource.master') public DataSource masterDataSource() {return DataSourceBuilder.create().build(); } @Bean(name = MultiDataSource.LOG_DATA_SOURCE) @ConfigurationProperties(prefix = 'datasource.log') public DataSource logDataSource() {return DataSourceBuilder.create().build(); } @Primary @Bean(name = 'dynamicDataSource') public DynamicDataSource dataSource() {DynamicDataSource dynamicDataSource = new DynamicDataSource();dynamicDataSource.setDefaultTargetDataSource(masterDataSource());Map<Object, Object> dataSourceMap = new HashMap<>(4);dataSourceMap.put(MASTER_DATA_SOURCE, masterDataSource());dataSourceMap.put(LOG_DATA_SOURCE, logDataSource());dynamicDataSource.setTargetDataSources(dataSourceMap);return dynamicDataSource; }}動態數據源路由實現

引入了配置信息之后,便是該說如何實現多數據源切換了。我們是通過實現AbstractRoutingDataSource類的determineCurrentLookupKey方法來實現數據源的動態路由,設置ThreadLocal線程保護變量存儲數據源key,確保線程間不受影響。

package com.lazycece.sbac.mysql.multi.config;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;/** * @author lazycece */public class DynamicDataSource extends AbstractRoutingDataSource { private static final Logger LOGGER = LoggerFactory.getLogger(DynamicDataSource.class); private static final ThreadLocal<String> DATA_SOURCE_KEY = new ThreadLocal<>(); static void changeDataSource(String dataSourceKey) {DATA_SOURCE_KEY.set(dataSourceKey); } static void clearDataSource() {DATA_SOURCE_KEY.remove(); } @Override protected Object determineCurrentLookupKey() {String key = DATA_SOURCE_KEY.get();LOGGER.info('current data-source is {}', key);return key; }}

隨后,便是用AOP的方式來實現數據源的動態切換,注解和切面定義如下:

@Documented@Inherited@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.TYPE})public @interface DataSource { String value();}@Component@Aspectpublic class DataSourceConfig { @Before('@annotation(dataSource)') public void beforeSwitchDataSource(DataSource dataSource) {DynamicDataSource.changeDataSource(dataSource.value()); } @After('@annotation(DataSource)') public void afterSwitchDataSource() {DynamicDataSource.clearDataSource(); }}動態數據源切換使用

動態數據源切換只需要在業務中使用@DataSource注解來標明需要使用的數據源即可,如下所示(這里只貼出關鍵代碼):

@Servicepublic class DynamicDataSourceServiceImpl implements DynamicDataSourceService { @Resource private UserDao userDao; @Resource private SystemLogDao systemLogDao; @Override @DataSource(value = MultiDataSource.MASTER_DATA_SOURCE) public void addUserInfo(User user) {userDao.insert(user); } @Override @DataSource(value = MultiDataSource.MASTER_DATA_SOURCE) public User getUserInfo(String username) {return userDao.findByUsername(username); } @Override @DataSource(value = MultiDataSource.LOG_DATA_SOURCE) public void addSystemLog(SystemLog systemLog) {systemLogDao.insert(systemLog); } @Override @DataSource(value = MultiDataSource.LOG_DATA_SOURCE) public List<SystemLog> getSystemLogInfo(Date beginTime, Date endTime) {return systemLogDao.findByCreateTime(beginTime, endTime); }}案例源碼

案例源碼地址: https://github.com/lazycece/springboot-actual-combat/tree/master/springboot-ac-mysql/springboot-ac-mysql-multi

到此這篇關于springboot中mybatis多數據源動態切換實現的文章就介紹到這了,更多相關springboot mybatis多數據源動態切換內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 深圳市八百通智能技术有限公司官方网站 | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 | 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 鑫铭东办公家具一站式定制采购-深圳办公家具厂家直销 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 双舌接地线-PC68数字式高阻计-ZC36|苏海百科 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 紫外可见光分光度计-紫外分光度计-分光光度仪-屹谱仪器制造(上海)有限公司 | 数码管_LED贴片灯_LED数码管厂家-无锡市冠卓电子科技有限公司 | 谷歌关键词优化-外贸网站优化-Google SEO小语种推广-思亿欧外贸快车 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 深圳市八百通智能技术有限公司官方网站| 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 | 一航网络-软件测评官网 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 制样机-密封锤式破碎机-粉碎机-智能马弗炉-南昌科鑫制样 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 游泳池设计|设备|配件|药品|吸污机-东莞市太平洋康体设施有限公司 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 德州网站制作 - 网站建设设计 - seo排名优化 -「两山建站」 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 机械加工_绞车配件_立式离心机_减速机-洛阳三永机械厂 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 流水线电子称-钰恒-上下限报警电子秤-上海宿衡实业有限公司 | 高压微雾加湿器_工业加湿器_温室喷雾-昌润空气净化设备 | 大连海岛旅游网>>大连旅游,大连海岛游,旅游景点攻略,海岛旅游官网 | 京马网,京马建站,网站定制,营销型网站建设,东莞建站,东莞网站建设-首页-京马网 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 丹佛斯变频器-Danfoss战略代理经销商-上海津信变频器有限公司 | 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 |