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 写在方法上,配合这个类就可以做数据库主库从库读写分离了
相关推荐
在IT行业中,构建高效、可扩展的分布式系统常常需要使用主从数据库架构,以实现读写分离,提高系统的并发处理能力和数据安全性。本项目基于SpringBoot 2.0框架和MyBatis持久层技术,实现了主从数据库双数据源的配置...
本主题聚焦于在Spring Cloud环境中实现多数据库和多数据源的整合,并且能够动态切换查询的数据库。这是一个复杂但至关重要的需求,特别是在大型企业级应用中,可能需要根据业务逻辑或用户权限连接到不同的数据库。 ...
本项目"multiple-datasource"旨在演示如何在Spring Boot环境中配置和使用主从数据库设置,这对于处理高并发、大数据量的应用场景非常有用,可以实现读写分离,提高系统的性能。 主从数据库配置的核心在于数据的复制...
基于Spring的 AbstractRoutingDataSource 进行简单的封装,方便进行数据源的切换,目前主要用于主从数据库的读写切换上。切换spring数据源的工具,使用aop注解方式进行快速切换,减少编码的入侵
本篇文档将详细探讨如何利用Spring框架实现数据库的读写分离,并结合MySQL的主从复制机制,确保系统的稳定运行和高效响应。 ### 背景分析 在实际应用中,许多系统面临着数据读取压力远大于写入压力的情况,这导致...
1. **配置主从数据源**:首先,你需要为你的主数据库和从数据库创建两个独立的数据源。在Spring的配置文件中,可以使用@Bean注解来定义这两个数据源,分别命名为masterDataSource和slaveDataSource。 2. **创建路由...
本篇文章将详细讲解如何在Spring Boot中整合Mybatis并利用Druid实现多数据源的自动切换,以满足业务对数据隔离和灵活切换的需求。 首先,我们要了解Spring Boot和Mybatis的整合。Spring Boot简化了Spring应用的初始...
6. **Spring配置读写分离**:在Spring中,可以通过`DataSource`接口的实现类(如`AbstractRoutingDataSource`)来创建一个路由数据源,动态选择读库或写库。你需要定义两个或多个实际的数据源,并设置路由规则,比如...
标签“源码”和“工具”表明这个项目可能包含了源代码,并且它可能是一个开发者工具,用于简化在Spring环境中处理主从数据库的复杂性。源码分析可以帮助我们理解如何配置和扩展这套系统,而作为工具,它应该提供了...
6. 实现读写分离,主从数据库的切换策略。 7. 多数据源的异常处理和日志记录。 总的来说,这个压缩包是一个丰富的学习资源,对于想要掌握Spring与Mybatis整合以及多数据源管理的开发者来说,是非常有价值的参考资料...
在实际应用中,我们可能需要配置多种数据源以处理不同的数据库需求,比如主从数据库、多租户系统等。本篇文章将详细讲解如何在Spring配置文件中注册三种不同类型的数据库数据源,并从属性文件中读取数据库连接的四个...
Spring AOP 实现主从读写分离是指通过 Spring 的 AOP 机制来实现数据库的读写分离,以提高数据库的性能和可靠性。下面是实现 Spring AOP 实现主从读写分离的详细步骤。 首先,我们需要了解为什么要实现读写分离。...
在Spring Boot框架中,MyBatis作为持久层的优秀选择,常常被用于处理与数据库的交互。当项目需要连接并操作多个不同的数据库时,我们可以通过动态数据源切换来实现这一需求。本文将深入探讨如何在Spring Boot应用中...
在企业级应用开发中,常常会遇到需要连接多个数据库的情况,比如主从数据库、读写分离、分布式数据库等。Spring 和 MyBatis 结合使用时,实现多数据源动态切换是一项重要的技术。本文将深入探讨如何在 Spring 中配置...
在许多实际项目中,我们可能需要连接并操作多个数据库,比如主从数据库、读写分离、不同环境的数据隔离等,这时就需要用到Spring的多数据源支持。 Spring多数据源允许我们在一个应用中同时管理多个数据库连接,通过...
在SpringBoot应用中,我们经常遇到需要连接多个数据库的情况,比如主从数据库分离、读写分离等场景。本文将详细讲解如何使用SpringBoot结合AOP(面向切面编程)来实现多数据源的动态切换。 首先,理解SpringBoot的...
5. **代码实现**: 实现动态切换数据源需要编写自定义的DataSource类,该类通常会继承Spring的`AbstractRoutingDataSource`。在这个类中,我们需要覆盖`determineCurrentLookupKey`方法,该方法返回当前应该使用的...
Spring Boot默认支持几种流行的数据库连接池,如HikariCP、Druid、Tomcat JDBC等。这些连接池都提供了高效的连接管理和资源优化。HikariCP以其高性能和低内存占用被广泛采用,而Druid则以其丰富的监控功能受到青睐。...
在Spring Boot应用中,我们经常遇到需要连接多个数据库的情况,比如主从数据库、读写分离等。本示例主要讲解如何使用Spring Boot结合MyBatis实现多数据源切换,并确保AOP事务管理仍然有效。 首先,我们需要配置多...
2. **动态数据库切换**:可以通过应用层或中间件来实现动态数据库切换。应用层实现相对简单,但需要程序员手动编写代码;中间件如Mycat则能更方便地实现读写分离,并且支持动态增加数据源。 #### 六、动态数据库...