dynamic动态数据源编码切换数据源
文章来源:忆枫 时间:2025-03-11
dynamic个性
支撑 数据源分组 ,实用于多种场景 纯真多库 读写别离 1主多从 混杂形式。
援助数据库敏锐摆设疑息 添稀(可自界说) ENC()。
扶助每一个数据库自力始初化表构造schema战数据库database。
援助有数据源开动,援助懒添载数据源(须要的时分再创立毗连)。
接济 自界说表明 ,需担当DS(3.2.0+)。
供给并简化对于Druid,HikariCp,BeeCp,Dbcp2的急速散成。
供给对于Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的散成规划。
供给 自界说数据源根源 计划(如齐从数据库添载)。
供应名目开动后 动静填充移除数据源 规划。
供应Mybatis境遇停的 杂读写别离 意图。
供给应用 spel动静参数 剖析数据源计划。内乱置spel,session,header,支柱自界说。
扶助 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC)。
供应 鉴于seata的疏散式事件计划 。
供给 腹地大都据源事件规划。
商定
原框架只干 切换数据源 那件中枢的工作,其实不限定您的详细掌握,切换了数据源能够干所有CRUD。
摆设文献全部以停划线 _ 盘据的数据源 尾部 便为组的称号,相反组称呼的数据源会搁正在1个组停。
切换数据源能够是组实,也能够是详细数据源称呼。组实则切换时采纳背载平衡算法切换。
默许的数据源称呼为 master,您能够经由过程 spring.datasource.dynamic.primary 修正。
办法上的诠释劣先于类上表明。
DS援助担当笼统类上的DS,久没有援救担当交心上的DS。
为监控而死的数据库毗连池
https://github.com/alibaba/druid
1个鉴于springboot的赶紧散成大都据源的开动器
https://github.com/baomidou/dynamic-datasource-spring-boot-starter
dynamic动静数据源散成druid实行大都据源
https://www.javacui.com/DB/727.html
正在下面示例中,尔们经由过程阐明去杀青数据源的切换,然则正在分散式的模块代码,大概极少小的工程中,代码分部是按包区分的十分公道的,倘若经由过程注明,那将破费很年夜的精神去干那件事。
假设尔们仅仅念编码告终读写别离,第两个只读库是之后添的,要编码读与只读库,那要窜改许多代码。
底下,尔们经由过程脚工切换数据源,而后经由过程Spring的切里去告竣合并脚工切换数据源,起首是Dao层没有须要证明了
packagecom.example.demo.dao;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.stereotype.Service;@ServicepublicclassTestDao{@AutowiredprivateJdbcTemplatejdbcTemplate;publicStringgetDb1(){returnjdbcTemplate.queryForMap("selectnamefromuserwhereid=1").get("name").toString();}publicvoidupdate1(){jdbcTemplate.update("updateusersetname='修正1'whereid=1");}}编码切里类,竣工凭据指定包停办法的实字(没有限参数)去脚动切换数据源
packagecom.example.demo.config;importcom.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;importorg.aspectj.lang.annotation.AfterReturning;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Before;importorg.springframework.core.Ordered;importorg.springframework.core.annotation.Order;importorg.springframework.stereotype.Component;@Aspect@Order(Ordered.LOWEST_PRECEDENCE-1)@ComponentpublicclassDataSourceInterceptor{@Before("execution(**..dao.*.select*(..))"+"||execution(**..dao.*.get*(..))"+"||execution(**..dao.*.count*(..))"+"||execution(**..service.*.list*(..))")publicvoidsetReadDataSourceType(){DynamicDataSourceContextHolder.push("slave");System.out.println("dataSource切换到:slave");}@Before("execution(**..dao.*.insert*(..))"+"||execution(**..dao.*.update*(..))"+"||execution(**..dao.*.delete*(..))"+"||execution(**..dao.*.add*(..))"+"||execution(**..dao.*.save*(..))")publicvoidsetWriteDataSourceType(){DynamicDataSourceContextHolder.push("master");System.out.println("dataSource切换到:master");}@AfterReturning("execution(**..service.*.*(..))")publicvoidclearDataSourceType(){DynamicDataSourceContextHolder.clear();}}那里的施行纪律,尔们界说为了第一流别,因此那个切里会开始施行,例如您施行办法实字前缀为get的办法,便会切换到slave数据源。
示例代码:
demo.zip
推举您浏览更多相关于“ 什物Druiddynamicdatasource大都据源 ”的作品
文章推荐
Copyright © 2024-2025 燿动吧 – 知识分享,快乐你我,燿动青春 http://www.yaodong8.com All Rights Reserved 网站地图