`

srping , AbstractRoutingDataSource 主从数据库切换

 
阅读更多

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

这个类就是用来做主从数据库的,再做两个annotation,比如master和slave 写在方法上,配合这个类就可以做数据库主库从库读写分离了

分享到:
评论

相关推荐

    springboot2.0+mybatis主从数据库双数据源。

    在IT行业中,构建高效、可扩展的分布式系统常常需要使用主从数据库架构,以实现读写分离,提高系统的并发处理能力和数据安全性。本项目基于SpringBoot 2.0框架和MyBatis持久层技术,实现了主从数据库双数据源的配置...

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

    本主题聚焦于在Spring Cloud环境中实现多数据库和多数据源的整合,并且能够动态切换查询的数据库。这是一个复杂但至关重要的需求,特别是在大型企业级应用中,可能需要根据业务逻辑或用户权限连接到不同的数据库。 ...

    multiple-datasource:一个使用Spring Boot演示主从数据库设置的项目

    本项目"multiple-datasource"旨在演示如何在Spring Boot环境中配置和使用主从数据库设置,这对于处理高并发、大数据量的应用场景非常有用,可以实现读写分离,提高系统的性能。 主从数据库配置的核心在于数据的复制...

    切换spring数据源的工具,使用aop注解方式进行快速切换,减少编码的入侵

    基于Spring的 AbstractRoutingDataSource 进行简单的封装,方便进行数据源的切换,目前主要用于主从数据库的读写切换上。切换spring数据源的工具,使用aop注解方式进行快速切换,减少编码的入侵

    使用Spring实现读写分离(MySQL实现主从复制)

    本篇文档将详细探讨如何利用Spring框架实现数据库的读写分离,并结合MySQL的主从复制机制,确保系统的稳定运行和高效响应。 ### 背景分析 在实际应用中,许多系统面临着数据读取压力远大于写入压力的情况,这导致...

    在应用层通过spring特性解决数据库读写分离代码

    1. **配置主从数据源**:首先,你需要为你的主数据库和从数据库创建两个独立的数据源。在Spring的配置文件中,可以使用@Bean注解来定义这两个数据源,分别命名为masterDataSource和slaveDataSource。 2. **创建路由...

    Spring Boot整合Mybatis使用druid实现多数据源自动切换

    本篇文章将详细讲解如何在Spring Boot中整合Mybatis并利用Druid实现多数据源的自动切换,以满足业务对数据隔离和灵活切换的需求。 首先,我们要了解Spring Boot和Mybatis的整合。Spring Boot简化了Spring应用的初始...

    Spring实现数据库读写分离代码

    6. **Spring配置读写分离**:在Spring中,可以通过`DataSource`接口的实现类(如`AbstractRoutingDataSource`)来创建一个路由数据源,动态选择读库或写库。你需要定义两个或多个实际的数据源,并设置路由规则,比如...

    spring-master-slave-commondao

    标签“源码”和“工具”表明这个项目可能包含了源代码,并且它可能是一个开发者工具,用于简化在Spring环境中处理主从数据库的复杂性。源码分析可以帮助我们理解如何配置和扩展这套系统,而作为工具,它应该提供了...

    spring mybaitis 多数据源 多数据库连接资料及源代码.zip

    6. 实现读写分离,主从数据库的切换策略。 7. 多数据源的异常处理和日志记录。 总的来说,这个压缩包是一个丰富的学习资源,对于想要掌握Spring与Mybatis整合以及多数据源管理的开发者来说,是非常有价值的参考资料...

    Spring配置三种数据源及从属性文件中读取DB连接四要素

    在实际应用中,我们可能需要配置多种数据源以处理不同的数据库需求,比如主从数据库、多租户系统等。本篇文章将详细讲解如何在Spring配置文件中注册三种不同类型的数据库数据源,并从属性文件中读取数据库连接的四个...

    详解Spring AOP 实现主从读写分离

    Spring AOP 实现主从读写分离是指通过 Spring 的 AOP 机制来实现数据库的读写分离,以提高数据库的性能和可靠性。下面是实现 Spring AOP 实现主从读写分离的详细步骤。 首先,我们需要了解为什么要实现读写分离。...

    对应的文章 Springboot Mybatis 多数据源利用注解动态切换数据库

    在Spring Boot框架中,MyBatis作为持久层的优秀选择,常常被用于处理与数据库的交互。当项目需要连接并操作多个不同的数据库时,我们可以通过动态数据源切换来实现这一需求。本文将深入探讨如何在Spring Boot应用中...

    spring mybatis 多数据源动态切换

    在企业级应用开发中,常常会遇到需要连接多个数据库的情况,比如主从数据库、读写分离、分布式数据库等。Spring 和 MyBatis 结合使用时,实现多数据源动态切换是一项重要的技术。本文将深入探讨如何在 Spring 中配置...

    spring多数据源

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

    SpringBoot使用AOP完成多数据源切换

    在SpringBoot应用中,我们经常遇到需要连接多个数据库的情况,比如主从数据库分离、读写分离等场景。本文将详细讲解如何使用SpringBoot结合AOP(面向切面编程)来实现多数据源的动态切换。 首先,理解SpringBoot的...

    动态切换Datasource

    5. **代码实现**: 实现动态切换数据源需要编写自定义的DataSource类,该类通常会继承Spring的`AbstractRoutingDataSource`。在这个类中,我们需要覆盖`determineCurrentLookupKey`方法,该方法返回当前应该使用的...

    springboot连接池、动态配置多数据源连接池,特别适合大数据部门、数据中台服务的多数据源连接池.zip

    Spring Boot默认支持几种流行的数据库连接池,如HikariCP、Druid、Tomcat JDBC等。这些连接池都提供了高效的连接管理和资源优化。HikariCP以其高性能和低内存占用被广泛采用,而Druid则以其丰富的监控功能受到青睐。...

    springboot实现多数据源而且加上事务不会使aop切换数据源失效

    在Spring Boot应用中,我们经常遇到需要连接多个数据库的情况,比如主从数据库、读写分离等。本示例主要讲解如何使用Spring Boot结合MyBatis实现多数据源切换,并确保AOP事务管理仍然有效。 首先,我们需要配置多...

    Mysql的读写分离、MySQL主从复制

    2. **动态数据库切换**:可以通过应用层或中间件来实现动态数据库切换。应用层实现相对简单,但需要程序员手动编写代码;中间件如Mycat则能更方便地实现读写分离,并且支持动态增加数据源。 #### 六、动态数据库...

Global site tag (gtag.js) - Google Analytics