`

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

阅读更多

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

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

研究成果如下:

1、首先配置多个datasource

<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方法

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解决线程安全问题

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、数据源配置

<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中切换数据源

CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B); 

 

 

For more details,please refer

分享到:
评论

相关推荐

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

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

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

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

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

    在Spring Boot 2框架中,实现多数据源的配置是一项重要的任务,特别是在大型企业级应用中,可能需要连接到不同的数据库来满足不同业务的需求。在这个项目中,我们有两个主要的数据访问技术:Hibernate和MyBatis,...

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

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

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

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

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

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

    Spring+Hibernate多数据源

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

    spring整合mybatis多数据源

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

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

    总的来说,Spring Cloud多数据源整合和动态切换数据库是一项挑战性的工作,但通过合理的架构设计和Spring框架的特性,可以有效地实现这一功能,为大型分布式系统提供灵活和可扩展的数据访问能力。

    spring boot多数据源配置

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

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

    总的来说,Spring多数据源分布式事务管理是一项复杂的任务,涉及到Spring的AOP、数据源路由、事务管理等多个方面。通过Atomikos这样的JTA实现,我们可以有效地解决分布式环境下的事务一致性问题。同时,结合Druid和...

    Spring动态切换多数据源Demo

    "Spring动态切换多数据源Demo"是一个示例项目,它展示了如何在Spring中实现灵活的数据源切换。 首先,我们需要了解Spring中的数据源。在Spring中,数据源(DataSource)是Java中定义的javax.sql.DataSource接口的...

    Spring配置多个数据源

    Spring框架提供了一种灵活的方式来配置和管理多个数据源,使得这种需求变得简单易行。本文将详细介绍如何在Spring应用中配置多个数据源。 首先,我们来理解数据源(DataSource)的概念。数据源是Java中用于存储...

    mybatis spring 多数据源

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

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

    2. **使用AbstractRoutingDataSource**:Spring提供了一个抽象类`AbstractRoutingDataSource`,它可以基于某种条件(如线程绑定的变量)动态决定使用哪个数据源。我们需要创建一个自定义的DataSource,继承自`...

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

    总的来说,Spring Boot和MyBatis的多数据源解决方案为开发者提供了一种灵活、可扩展的方式来管理和操作多个数据库,满足了复杂业务场景下的需求。通过合理的配置和设计,可以有效提升系统的稳定性和性能。

    springAop多数据源

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

    spring多数据源

    Spring多数据源允许我们在一个应用中同时管理多个数据库连接,通过切换不同的数据源来满足不同业务的需求。实现这一功能的关键在于Spring的DataSourceTransactionManager和AbstractRoutingDataSource。 1. **...

    Spring多数据源解决方案

    Spring多数据源解决方案是针对大型应用中数据分片和分布式数据库管理的需求而设计的一种策略。在这样的场景下,为了提高系统的可扩展性和性能,数据通常会被分散到多个数据库实例上。这种架构如图1所示,每个数据库...

    Spring+SpringMVC+Mybatis动态链接多数据源

    本项目“Spring+SpringMVC+Mybatis动态链接多数据源”旨在实现一个灵活、可扩展的数据源切换机制,以适应复杂的业务场景。 Spring框架作为Java领域中最广泛使用的轻量级框架,它提供了强大的依赖注入和AOP(面向切...

Global site tag (gtag.js) - Google Analytics