`

利用Spring的AbstractRoutingDataSource解决多数据源的问题

 
阅读更多

多数据源问题很常见,例如读写分离数据库配置。

 

原来的项目出现了新需求,局方要求新增某服务器用以提供某代码,涉及到多数据源的问题。

 

研究成果如下:

 

1、首先配置多个datasource

 

  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  2.         <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver">  
  3.         </property>  
  4.         <property name="url" value="jdbc:jtds:sqlserver://10.82.81.51:1433;databaseName=standards">  
  5.         </property>  
  6.         <property name="username" value="youguess"></property>  
  7.         <property name="password" value="youguess"></property>  
  8.     </bean>  
  9.     <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">  
  10.         <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver">  
  11.         </property>  
  12.         <property name="url" value="jdbc:jtds:sqlserver://10.82.81.52:1433;databaseName=standards">  
  13.         </property>  
  14.         <property name="username" value="youguess"></property>  
  15.         <property name="password" value="youguess"></property>  
  16. </bean>  


2、写一个DynamicDataSource类继承AbstractRoutingDataSource,并实现determineCurrentLookupKey方法

 

  1. package com.standard.core.util;  
  2. import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;  
  3. public class DynamicDataSource extends AbstractRoutingDataSource {  
  4.     @Override  
  5.     protected Object determineCurrentLookupKey() {  
  6.         return CustomerContextHolder.getCustomerType();  
  7.     }  
  8. }  



 

3、利用ThreadLocal解决线程安全问题

 

 

 

  1. package com.standard.core.util;  
  2. public class CustomerContextHolder {  
  3.     public static final String DATA_SOURCE_A = "dataSource";  
  4.     public static final String DATA_SOURCE_B = "dataSource2";  
  5.     private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();  
  6.     public static void setCustomerType(String customerType) {  
  7.         contextHolder.set(customerType);  
  8.     }  
  9.     public static String getCustomerType() {  
  10.         return contextHolder.get();  
  11.     }  
  12.     public static void clearCustomerType() {  
  13.         contextHolder.remove();  
  14.     }  
  15. }  


4、数据源配置

 

 

  1. <bean id="dynamicDataSource" class="com.standard.core.util.DynamicDataSource" >  
  2.         <property name="targetDataSources">  
  3.             <map key-type="java.lang.String">  
  4.                 <entry value-ref="dataSource" key="dataSource"></entry>  
  5.                 <entry value-ref="dataSource2" key="dataSource2"></entry>  
  6.             </map>  
  7.         </property>  
  8.         <property name="defaultTargetDataSource" ref="dataSource" >  
  9.         </property>  
  10.     </bean>   


5、在DAOImpl中切换数据源

 

 

  1. CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);   


搞定!

分享到:
评论

相关推荐

    详解利用Spring的AbstractRoutingDataSource解决多数据源的问题

    Spring框架提供了多种方式来处理多数据源问题,其中`AbstractRoutingDataSource`是一个非常实用的解决方案。本文将详细解析如何利用`AbstractRoutingDataSource`来解决多数据源的问题。 `AbstractRoutingDataSource...

    浅谈利用Spring的AbstractRoutingDataSource解决多数据源的问题

    总结起来,利用Spring的`AbstractRoutingDataSource`解决多数据源问题的关键在于自定义一个继承自`AbstractRoutingDataSource`的类,实现数据源的选择逻辑,以及使用`ThreadLocal`保持线程上下文。配合AOP,可以在...

    spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码

    这些代码可以直接集成到你的项目中,只需要调整为匹配你的数据库配置,就可以实现Spring Boot 2下的多数据源支持,同时利用Hibernate和MyBatis的优势。 总之,多数据源的实现是Spring Boot 2应用中的高级特性,它...

    使用Spring的AbstractRoutingDataSource实现多数据源切换示例

    `AbstractRoutingDataSource` 是Spring提供的一种动态数据源解决方案,它允许我们在运行时根据特定的规则(通常是业务上下文)选择使用哪个数据源。 `AbstractRoutingDataSource` 类本身是一个抽象类,它扩展了`...

    Spring(AbstractRoutingDataSource)实现动态数据源切换示例

    【Spring 动态数据源切换】使用 `AbstractRoutingDataSource` 的详细实现在处理多数据库环境时,Spring 提供了一个强大的工具 `AbstractRoutingDataSource`,它允许我们根据特定条件动态地切换数据源。本文将深入...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    使用Spring的`AbstractRoutingDataSource`,我们可以实现数据源的动态选择。这个抽象类会根据当前的业务上下文(例如,通过`ThreadLocal`变量)决定使用哪个数据源。这样,我们可以在运行时根据业务需求灵活地切换...

    Springcloud 多数库 多数据源整合,查询动态切换数据库

    2. **动态切换数据源**:在Spring框架中,我们可以利用AOP(面向切面编程)和ThreadLocal来实现数据源的动态切换。创建一个自定义的数据源切换注解,比如`@SwitchDataSource`,并在需要切换数据源的方法上使用。通过...

    spring整合mybatis多数据源

    总的来说,Spring整合MyBatis的多数据源切换是解决复杂数据库应用场景的有效手段。通过灵活的数据源路由,我们可以轻松地实现读写分离、数据库分片等高级架构,提升系统的可扩展性和性能。理解并掌握这一技术对于...

    Spring+Hibernate多数据源

    接着,描述中的"Spring+Hibernate多数据源的整合实现demo"意味着这是一个实际操作的示例,它可能包含了一个或多个配置文件和Java代码,展示了如何在Spring Boot或者传统的Spring环境下配置和使用多数据源。在Spring ...

    Spring多数据源分布式事务管理

    在Spring中,我们可以通过DataSourceProxy和AbstractRoutingDataSource来实现多数据源的切换。DataSourceProxy是Spring的一个代理类,它可以对数据源进行包装,以便在执行SQL语句前决定使用哪个数据源。...

    spring boot多数据源配置

    在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...

    Spring动态切换多数据源Demo

    Spring提供了多种方式来管理多数据源,例如通过`AbstractRoutingDataSource`实现动态数据源切换。这个类可以根据某些条件(如事务的标识、请求上下文等)动态决定使用哪个数据源。在`dynamicDatasourceDemo`项目中,...

    Spring配置多个数据源

    如果你的应用需要根据业务逻辑动态选择数据源,可以使用Spring的`AbstractRoutingDataSource`。这个类允许你根据某些条件(如事务ID、方法名等)动态决定使用哪个数据源。 通过以上步骤,你可以在Spring应用中成功...

    mybatis spring 多数据源

    标题 "mybatis spring 多数据源" 涉及到的...总的来说,"mybatis spring 多数据源"的主题涵盖了如何在Java应用中利用MyBatis和Spring进行多数据库管理,包括数据源配置、动态数据源路由、事务管理以及相关工具的使用。

    spring boot mybatis多数据源最简解决方案

    在Spring Boot中,我们可以利用其强大的自动配置能力来管理多个数据源。以下是一些关键步骤: 1. **配置数据源**:在`application.properties`或`application.yml`文件中,为每个数据源设置独立的配置。例如,可以...

    mybatis+spring实现动态切换数据源

    在本项目中,我们将探讨如何利用MyBatis与Spring框架实现动态切换数据源的功能。首先,我们需要理解MyBatis和Spring的基本概念以及它们如何协同工作。 MyBatis是一个优秀的持久层框架,它简化了Java与数据库之间的...

    springAop多数据源

    在这个场景中,我们将关注Spring的两个重要概念:多数据源和AOP,以及如何利用Spring JdbcTemplate进行数据库操作,并通过JUnit进行测试。 首先,"SpringAop多数据源"指的是在同一个应用程序中同时处理多个不同的...

    Spring+SpringMvc+MybatisPlus+Aop(自定义注解)动态切换数据源

    本项目“Spring+SpringMvc+MybatisPlus+Aop(自定义注解)动态切换数据源”正是针对这一需求提供的一种解决方案。下面将详细介绍这个项目中的关键技术点和实现原理。 首先,Spring框架是Java企业级应用开发的核心...

    spring 动态多数据源配置代码

    下面将详细介绍Spring动态多数据源配置的相关知识点。 1. **为什么要使用多数据源**: 在实际项目中,可能需要连接到不同的数据库,例如,一个用于存储主业务数据,另一个用于日志记录或数据分析。通过多数据源...

    spring多数据源

    在许多实际项目中,我们可能需要连接并操作多个数据库,比如主从数据库、读写分离、不同环境的数据隔离等,这时就需要用到Spring的多数据源支持。 Spring多数据源允许我们在一个应用中同时管理多个数据库连接,通过...

Global site tag (gtag.js) - Google Analytics