数据源切换

数据源切换,一般应用在分库分表情况,根据不同的信息将内容存储到对应的数据库。

 

                                                                                                 

 

                                                                                  

                                                                               

 

      

 

 

 

 

 

在服务接口的项目中

 

 

1.写一个工具类,用于切换数据源

 

     其中如果直接用共享的key会导致线程不安全,需要绑定各自的key,则需要用到ThreadLocal进行绑定     

 

package com.demo.utils;

 

public class MyLookupKey {

 

   private static ThreadLocal<String> lookupKey = new ThreadLocal<String>();

 

   public static String getLookupKey() {

      return lookupKey.get();

   }

 

   public static void setLookupKey(String key_in) {

      lookupKey.set(key_in);

   }

 

}

 

 

 

2.写一个工具类,继承AbstractRoutingDataSource

          通过切换数据源的工具类获取数据源

 

package com.demo.utils;

 

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**

 * 继承AbstractRoutingDataSource

 * @author guohongyan

 *

 */

public class MyDateSource extends AbstractRoutingDataSource {

 

   @Override

   protected Object determineCurrentLookupKey() {

 

      return MyLookupKey.getLookupKey();

   }

 

}

 

 

3.在dbConfig.xml文件加入数据源的Url

 

driverClassName=com.mysql.jdbc.Driver

url1=jdbc:mysql://192.168.30.57:3306/project?useUnicode=true&characterEncoding=UTF-8

url2=jdbc:mysql://192.168.30.57:3306/project_user?useUnicode=true&characterEncoding=UTF-8

jdbc.username=root

jdbc.password=root

 

 

4.applicationContext.xml文件中配置数据源路由器

 

<bean class="com.atguigu.utils.MyDateSource" id="dataSource">

      <property name="targetDataSources">

          <map key-type="java.lang.String">

             <entry key="1" value-ref="dataSource1"/>

             <entry key="2" value-ref="dataSource2"/>

          </map>

      </property>

      <property name="defaultTargetDataSource" ref="dataSource1"></property>

   </bean>

 

   <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource">

      <property name="driverClassName" value="${driverClassName}" />

      <property name="url" value="${url1}" />

      <property name="username" value="${jdbc.username}" />

      <property name="password" value="${jdbc.password}" />

   </bean>

   <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">

      <property name="driverClassName" value="${driverClassName}" />

      <property name="url" value="${url2}" />

      <property name="username" value="${jdbc.username}" />

      <property name="password" value="${jdbc.password}" />

   </bean>

 

 

 

5.在login方法中,查询数据库之前,切换数据源

 

@Override

   public User login(User user) {

      MyLookupKey.setLookupKey("2");

      return userMapper.select_user(user);

   }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值