Spring 的AbstractRoutingDataSource實現多資料來源
1、首先配置多個datasource
[html] view plaincopy
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver">
- </property>
- <property name="url" value="jdbc:jtds:sqlserver://10.82.81.51:1433;databaseName=standards">
- </property>
- <property name="username" value="youguess"></property>
- <property name="password" value="youguess"></property>
- </bean>
- <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver">
- </property>
- <property name="url" value="jdbc:jtds:sqlserver://10.82.81.52:1433;databaseName=standards">
- </property>
- <property name="username" value="youguess"></property>
- <property name="password" value="youguess"></property>
- </bean>
2、寫一個DynamicDataSource類繼承AbstractRoutingDataSource,並實現determineCurrentLookupKey方法
[java] view plaincopy
- package com.standard.core.util;
- import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
- public class DynamicDataSource extends AbstractRoutingDataSource {
- @Override
- protected Object determineCurrentLookupKey() {
- return CustomerContextHolder.getCustomerType();
- }
- }
3、利用ThreadLocal解決執行緒安全問題
[java] view plaincopy
- package com.standard.core.util;
- public class CustomerContextHolder {
- public static final String DATA_SOURCE_A = "dataSource";
- public static final String DATA_SOURCE_B = "dataSource2";
- private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
- public static void setCustomerType(String customerType) {
- contextHolder.set(customerType);
- }
- public static String getCustomerType() {
- return contextHolder.get();
- }
- public static void clearCustomerType() {
- contextHolder.remove();
- }
- }
4、資料來源配置
[html] view plaincopy
- <bean id="dynamicDataSource" class="com.standard.core.util.DynamicDataSource" >
- <property name="targetDataSources">
- <map key-type="java.lang.String">
- <entry value-ref="dataSource" key="dataSource"></entry>
- <entry value-ref="dataSource2" key="dataSource2"></entry>
- </map>
- </property>
- <property name="defaultTargetDataSource" ref="dataSource" >
- </property>
- </bean>
5、在DAOImpl中切換資料來源
[java] view plaincopy
- CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);
相關文章
- Spring多資料來源管理實現原理Spring
- Spring+MyBatis多資料來源配置實現SpringMyBatis
- AbstractRoutingDataSource 實現動態資料來源切換原理簡單分析
- 實現Spring動態註冊多資料來源Spring
- Spring實現多資料來源動態切換Spring
- 談談Spring Boot 資料來源載入及其多資料來源簡單實現Spring Boot
- 實現多資料來源事務
- Spring多資料來源配置Spring
- Spring配置多資料來源Spring
- Spring-Boot 多資料來源配置+動態資料來源切換+多資料來源事物配置實現主從資料庫儲存分離Springboot資料庫
- Spring Boot + Mybatis 多資料來源配置實現讀寫分離Spring BootMyBatis
- Spring多資料來源獲取Spring
- Spring Boot 配置多資料來源Spring Boot
- Spring Boot 多資料來源配置Spring Boot
- Spring是如何支援多資料來源的Spring
- java中如何實現多個資料來源?Java
- Atomikos實現多資料來源的事物管理
- spring 配置多個資料來源的檔案Spring
- Spring Boot 入門系列(二十三)整合Mybatis,實現多資料來源配置!Spring BootMyBatis
- 如何用hutool-db實現多資料來源配置
- spring多資料來源下 事務不生效Spring
- 使用Spring Boot配置多個資料來源 - UdithSpring Boot
- Spring 多資料來源 AOP 動態切換Spring
- Spring Boot MyBatis 動態資料來源切換、多資料來源,讀寫分離Spring BootMyBatis
- Spring boot 如何快速的配置多個 Redis 資料來源Spring BootRedis
- Spring Boot中的Mongodb多資料來源擴充套件Spring BootMongoDB套件
- 基於xml的Spring多資料來源配置和使用XMLSpring
- 多資料來源與動態資料來源的權衡
- Spring Boot 動態資料來源(Spring 註解資料來源)Spring Boot
- 基於Spring Boot與Spring Data JPA的多資料來源配置Spring Boot
- 多資料來源配置
- Spring Boot 2.x基礎教程:使用JTA實現多資料來源的事務管理Spring Boot
- 【教程】Spring+Mybatis環境配置多資料來源SpringMyBatis
- Spring Boot與多資料來源那點事兒~Spring Boot
- spring-boot-route(十)多資料來源切換Springboot
- spring-mybatis專案搭建(支援多資料來源)SpringMyBatis
- 基於註解的Spring多資料來源配置和使用Spring
- MO_or掰泡饃式教學實現多資料來源