数据源切换

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

                                                                                                 

                                                                                  

                                                                               

      

在服务接口的项目中

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);

   }

猜你喜欢

转载自blog.csdn.net/fz13768884254/article/details/84345212