spring数据源切换

xiaoxiao2021-02-28  120

数据源配置 <bean id="dynamicDataSource" class="com.want.search.util.DbContextHolder" > <property name="targetDataSources"> <map key-type="java.lang.String"> <!--通过不同的key决定用哪个dataSource--> <entry value-ref="dataSource1" key="dataSource1"></entry> <entry value-ref="dataSource2" key="dataSource2"></entry> </map> </property> <!--设置默认的dataSource--> <property name="defaultTargetDataSource" ref="dataSource1"></property> </bean>

2.实现类

package com.want.search.util; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DbContextHolder extends AbstractRoutingDataSource{ public static final String DATA_SOURCE_DEFA = "dataSource1"; public static final String DATA_SOURCE_FLOW = "dataSource2"; private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); /** * 设置当前数据库。 * @param dbType */ public static void setDbType(String dbType) { contextHolder.set(dbType); } /** * 取得当前数据源。 * @return */ public static String getDbType() { String str = (String) contextHolder.get(); return str; } /** * 清除上下文数据 */ public static void clearDbType() { contextHolder.remove(); } @Override protected Object determineCurrentLookupKey() { // TODO Auto-generated method stub return DbContextHolder.getDbType(); } }

3.将数据源注入到sqlsessionFactory

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="mapperLocations" value="classpath:mybatis/*Mapper.xml" /> <property name="dataSource" ref="dynamicDataSource" /> <property name="typeAliasesPackage" value="com.want.search.vo" /> </bean>

4.具体调用方法(只能在controller层才能实现数据源切换)

DbContextHolder.setDbType(DbContextHolder.DATA_SOURCE_FLOW);
转载请注明原文地址: https://www.6miu.com/read-33231.html

最新回复(0)