`

Spring中容易被忽视但有用的AbstractRoutingDataSource

 
阅读更多
在spring 中,一个很好用但是容易被忽略的,就是AbstractRoutingDataSource,它的一个作用就是可以根据用户发起的不同请求去转换不同的数据源,比如根据用户的不同地区语言选择不同的数据库,下面举例说明:



import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 
public class MyRoutingDataSource extends AbstractRoutingDataSource{
    @Override
    protected Object determineCurrentLookupKey() {
        String language = LocaleContextHolder.getLocale().getLanguage();
        System.out.println("Language obtained: "+ language);
        return language;
    }

   首先在这里,继承了AbstractRoutingDataSource类,然后获得当前的语言种类,在接下来中要用到:
  然后设置两个数据源,如下:
jdbc.databaseurlOne=jdbc:mysql://127.0.0.1:3306/test
jdbc.databaseurlTwo=jdbc:mysql://127.0.0.1:3306/testTwo


  然后同样在配置文件中设置:
<bean id="abstractDataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close"
    p:driverClassName="${jdbc.driverClassName}"
    p:username="${jdbc.username}"
    p:password="${jdbc.password}" />
 
<bean id="concreteDataSourceOne"
    parent="abstractDataSource"
    p:url="${jdbc.databaseurlOne}"/>
  
 <bean id="concreteDataSourceTwo"
    parent="abstractDataSource"
    p:url="${jdbc.databaseurlTwo}"/>


  可以看到,这里有两个不同的数据库,这里假设各自的用户名和密码都是一样的,只是URL不同,
  继续:
  
<bean id="dataSource" class="com.howtodoinjava.controller.MyRoutingDataSource">
   <property name="targetDataSources">
      <map key-type="java.lang.String">
         <entry key="en" value-ref="concreteDataSourceOne"/>
         <entry key="es" value-ref="concreteDataSourceTwo"/>
      </map>
   </property>
 
</bean>


   这里,就是用到了上面的MyRoutingDataSource类,其中指定当返回的语言是en的时候,用
  concreteDataSourceOne数据源,为es的时候,用concreteDataSourceTwo
11
12
分享到:
评论
3 楼 穿围裙的程序员 2015-04-20  
spring 自带的JdbcTemplate为什么切换不过来呢?
2 楼 jackyrong 2014-01-09  
恩,是的,
1 楼 liubey 2014-01-08  
呵呵,你把这个类想简单了。这个类就是用来做主从数据库的,再做两个annotation,比如master和slave 写在方法上,配合这个类就可以做数据库主库从库读写分离了

相关推荐

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

    在企业级应用开发中,Spring框架因其强大的功能和灵活性,被广泛用于构建复杂的应用系统。在大型分布式系统中,往往需要处理多个数据源,这就涉及到了Spring多数据源的配置和管理。同时,为了保证数据的一致性,...

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

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

    spring 源码中文注释

    Spring框架是Java开发中最广泛应用的轻量级框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。这份"spring 源码...

    Spring-5.0.0-官方中文文档

    7. **Spring Boot**:虽然不直接属于Spring框架,但Spring Boot是Spring生态的重要部分,Spring 5的发布也意味着Spring Boot的升级,它简化了Spring应用的初始搭建和配置,让开发者更专注于业务逻辑。 8. **Spring ...

    Spring Boot整合Spring Batch,实现批处理

    在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...

    Spring中英文资料

    Spring框架是Java开发中最受欢迎的开源框架之一,它以其模块化、灵活性和强大的功能而闻名。这个"Spring中英文资料"包含的是关于Spring 2.0版本的文档,提供了中文和英文两种语言的学习资源,对于想要深入理解Spring...

    java *spring工具类 方便在非spring管理环境中获取bean

    java *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取beanjava *spring工具类 方便在非spring管理环境中获取...

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和...

    spring2.0升级到spring3.0.5的开发包

    Spring框架是Java应用程序开发中的一个核心组件,它提供了一个丰富的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)功能,使得开发者能够更方便地管理对象和实现模块化...

    Spring5中文文档

    在表达式语言(SpEL)章节中,介绍了Spring表达式语言的基础知识和功能特性,以及如何在Bean定义中使用SpEL表达式进行求值和语言参考。 测试章节提供了单元测试和集成测试的示例和最佳实践,包括JDBC测试和使用...

    Spring Integration + Spring WS 整合

    在 Java 领域中,Spring Integration 和 Spring WS 是两个常用的框架,它们分别负责集成系统和 Web 服务。今天,我们将探讨如何将这两个框架整合在一起,实现一个完整的 Web 服务解决方案。 Spring Integration ...

    Spring Reference(中文)

    它基于 Spring Boot 设计,使得在云环境中构建复杂应用变得更加容易。 **Spring Batch** Spring Batch 是用于处理大量数据的批处理框架,它提供了可扩展且健壮的批处理功能,如事务管理、错误处理和日志记录。...

    spring-modules-0.9.zip

    Spring Modules是针对Spring框架的一系列扩展工具和模块,旨在增强Spring的功能并促进其与其他...因此,在现代项目中,虽然Spring Modules的历史价值不容忽视,但可能需要考虑使用更新的Spring组件来满足当前的需求。

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...

    spring3.2中文参考手册

    依赖注入是一种设计模式,它允许将对象的创建和依赖关系的维护从被创建的对象中分离出来。在Spring框架中,控制反转是通过IoC容器实现的。IoC容器管理着对象的生命周期以及对象间的依赖关系。 2. Spring框架的模块...

    spring-boot spring-security-oauth2 完整demo

    在现代Web开发中,安全性是不可忽视的重要一环。Spring Boot、Spring Security和OAuth2是Java生态系统中用于构建安全Web应用的三大利器。本篇文章将围绕“spring-boot spring-security-oauth2 完整demo”这一主题,...

    spring 编译后源码(有注释)

    Spring 的核心特性可以用于任何 Java 应用程序,但其最具影响力的应用是在 Java EE(Enterprise Edition)应用程序中,它可以替代或者简化 J2EE 的许多复杂性。在"spring 编译后源码(有注释)"这个压缩包中,你将...

    Spring3.0中文帮助文档

    Spring 3.0是中国开发者广泛使用的Java企业级应用框架的重要版本,它提供了丰富的功能和改进,使得开发高质量、可维护的Java应用程序变得更加容易。这个中文帮助文档和权威开发指南是学习和掌握Spring 3.0不可或缺的...

    Spring-OSGI 1.0 M3 中文手册

    Spring Dynamic Modules使编写一个部署在OSGI执行环境中的Spring应用变得简单,它能利用OSGI框架提供的服务。Spring的osgi支持也使构建在Spring框架中的OSGI应用开发变得更简单,更高产。对于企业级应用,Spring动态...

    Spring in action 中文(第四版).pdf

    9. **Spring Cloud**:随着微服务架构的流行,Spring Cloud为Spring应用提供了云原生的服务发现、配置中心、负载均衡等功能,构建分布式系统变得更加容易。 这本书不仅适合初学者,对于有经验的开发者来说,也是...

Global site tag (gtag.js) - Google Analytics