AbstarctRoutingDataSource配合ThreadLocal实现分库
来源:互联网 发布:数据库的书籍 编辑:程序博客网 时间:2024/04/28 10:29
实现过程:
1.配置文件:配置数据表的连接信息生成bean,并将bean作为value,指定key名称,创建名为targetDataSources的map,该map通过spring初始化。
<bean id="ddpim" class="com.dangdang.item.ic.pub.pim.persistent.dynamic.DdpimDynamicDataSource"><property name="targetDataSources"><map key-type="java.lang.String"><entry key="ddpim" value-ref="ddpimDB" /><entry key="ddpim_00" value-ref="ddpim00" /><entry key="ddpim_01" value-ref="ddpim01" /><entry key="ddpim_02" value-ref="ddpim02" /><entry key="ddpim_03" value-ref="ddpim03" /><entry key="ddpim_04" value-ref="ddpim04" /><entry key="ddpim_05" value-ref="ddpim05" /><entry key="ddpim_06" value-ref="ddpim06" /><entry key="ddpim_07" value-ref="ddpim07" /><entry key="ddpim_08" value-ref="ddpim08" /><entry key="ddpim_09" value-ref="ddpim09" /></map></property><property name="defaultTargetDataSource" ref="ddpimDB" /></bean>
2.继承AbstarctRoutingDataSource抽象类,实现determineCurrentLookupKey方法,根据shopId取对应的数据库名称,并放入ThreadLocal中,AbstarctRoutingDataSource类的determineTargetDataSource方法会调用determineCurrentLookupKey获取数据库的名称,然后从resolvedDataSources这个map中(由targetDataSources转换而来)获取对应数据库名称的sqlsession。
/** * 数据源KEY */protected staticfinal ThreadLocal<String> dataSource = new ThreadLocal<String>();
//获取数据源KEYprotected ObjectdetermineCurrentLookupKey() {returndataSource.get();}
//AbstarctRoutingDataSource类中的determineTargetDataSource方法,调用determineCurrentLookupKey方法,获取数据源KEY,并根据KEY获取sqlsession。protected DataSource determineTargetDataSource() {Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");Object lookupKey = determineCurrentLookupKey();DataSource dataSource = this.resolvedDataSources.get(lookupKey);if (dataSource == null && (this.lenientFallback || lookupKey == null)) {dataSource = this.resolvedDefaultDataSource;}if (dataSource == null) {throw new IllegalStateException("Cannot determine target DataSource for lookup key [" + lookupKey + "]");}return dataSource;}
阅读全文
0 0
- AbstarctRoutingDataSource配合ThreadLocal实现分库
- ThreadLocal实现
- ThreadLocal实现
- 分库实现
- iOS UITableView+FDTemplateLayoutCell 配合AutoLayout分分钟教你实现类似微信朋友圈的动态高度自适应
- ThreadPoolExecutor 与 ThreadLocal 配合使用中出现数据不一致问题
- ThreadLocal 的实现
- ThreadLocal代码实现原理
- ThreadLocal实现线程隔离
- java-ThreadLocal的实现
- 实现ThreadLocal功能
- ThreadLocal实现简单剖析
- ThreadLocal作用与实现
- ThreadLocal的简单实现
- ThreadLocal的实现原理
- ThreadLocal实现原理
- threadLocal内部实现原理
- ThreadLocal的实现原理
- 对比度受限的自适应直方图均衡化(CLAHE)
- 线程优先级
- 汇总常规的seo外链建设途径
- Arrays.asList的陷阱
- ctfWeb攻防----天下武功为快不破
- AbstarctRoutingDataSource配合ThreadLocal实现分库
- P1996 约瑟夫问题
- 后台开发、运维监控系统要怎么搞?
- 剑指offer 编程题(32):第N个丑数
- 测试技术雷达的开篇
- poj 3984 bfs
- Java设计模式03--装饰者模式
- 论文查重
- CodeForces 17 A.Noldbach problem(水~)