Spring利用AbstractRoutingDataSource实现多数据源
来源:互联网 发布:sql format 日期 编辑:程序博客网 时间:2024/05/22 07:04
AbstractRoutingDataSource
该类充当了DataSource的路由中介, 在运行时, 根据key值来动态切换到真正的DataSource上。通过继承该类,重写determineCurrentLookupKey方法,实现数据源的切换。
spring配置文件:
<!-- 配置多个数据源 --><bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test1?userUnicode=true"/><property name="username" value="root"/><property name="password" value="123456"></property></bean><bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test2?userUnicode=true"/><property name="username" value="root"/><property name="password" value="123456"></property></bean><!-- 继承AbstractRoutingDataSource的数据源路由类 --><bean id="dynamicDataSource" class="com.learn.moreDate.DynamicDataSource" ><property name="targetDataSources"><map key-type="java.lang.String"><!-- 根据不同的key值,选择不同的数据源 --><entry value-ref="dataSource1" key="dataSource1"></entry><entry value-ref="dataSource2" key="dataSource2"></entry></map></property><!-- 默认数据源 --><property name="defaultTargetDataSource" ref="dataSource1"></property></bean>数据源路由类:
package com.learn.moreDate;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {// TODO Auto-generated method stubreturn CustomerContextHolder.getCustomerType();}}key值存储类:
package com.learn.moreDate;public class CustomerContextHolder {//数据源对应key值,与配置文件中key值相同public static final String DATA_A = "dataSource1";public static final String DATA_B = "dataSource2";//存储当前线程的key值private static final ThreadLocal<String> contextHolder = new ThreadLocal();public static void setCustomerType(String customerType){contextHolder.set(customerType);}public static String getCustomerType(){return contextHolder.get();}public static void clearCustomerType(){contextHolder.remove();}}测试类:
package com.learn.moreDate;import javax.sql.DataSource;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.jdbc.core.JdbcTemplate;public class Demo {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("classpath:config/applicationContext.xml");//设置数据源对应key值CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_B);//获取数据源DataSource dds = (DataSource)context.getBean("dynamicDataSource");//执行sqlJdbcTemplate template = new JdbcTemplate(dds);String sql = "delete from work";template.update(sql);}}
0 0
- Spring利用AbstractRoutingDataSource实现多数据源
- Spring 的AbstractRoutingDataSource实现多数据源
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- AbstractRoutingDataSource实现多数据源
- 【Spring】使用Spring的AbstractRoutingDataSource实现多数据源切换
- Android开发学习之路- Android数据存储方式总结
- 文本相似度-BM25算法
- 进阶项目10-区号查询
- 怎么开启WAMP环境的cURL扩展
- Android高级控件——ViewPager、GridView、popwindow、SlideMenu(下)
- Spring利用AbstractRoutingDataSource实现多数据源
- 【javase复习】## day7 集合Collection ##
- NCTF 南京邮电大学网络攻防训练平台 WriteUp
- 简单的利用jsp连接数据库(jdbc)
- SendMessage功能(中规中矩)
- JQuery之动画效果
- poj 2115 C Looooops 扩展欧几里得算法
- hdu 1867
- 半导体尺寸将停止缩小(来自麻省理工科技评论)