方案一
1、spring的applicationContext.xml中的配置
<bean id="masterDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="jdbc:postgresql://127.0.0.1:5432/zcaqs"/> <property name="username" value="postgres"/> <property name="password" value="123456"/> <property name="initialSize" value="1"/> <property name="maxActive" value="20"/> <property name="testOnBorrow" value="false"/> <property name="testWhileIdle" value="true"/> <property name="filters" value="stat"/> </bean> <bean id="slaveDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="jdbc:postgresql://127.0.0.1:5432/zcaqs"/> <property name="username" value="postgres"/> <property name="password" value="123456"/> <property name="initialSize" value="1"/> <property name="maxActive" value="20"/> <property name="testOnBorrow" value="false"/> <property name="testWhileIdle" value="true"/> <property name="filters" value="stat"/> <!--开启监控--> </bean> <bean id="dataSource" class="org.akzx.acaqs.base.database.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry key="slave" value-ref="slaveDataSource"/> </map> </property> <property name="defaultTargetDataSource" ref="masterDataSource"/> </bean> <!-- 切换数据源 --> <bean id="dataSourceAdvice" class="org.akzx.acaqs.base.database.DataSourceAdvice"/> <aop:config> <aop:advisor pointcut="execution(* org.akzx.acaqs.service..*Service.*(..))" advice-ref="dataSourceAdvice"/> </aop:config>
2、两个需要实现的bean类
public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DataSourceSwitcher.getDataSource(); } } public class DataSourceAdvice implements MethodBeforeAdvice, AfterReturningAdvice, ThrowsAdvice { // service方法执行之前被调用 public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println("切入点: " + target.getClass().getName() + "类中" + method.getName() + "方法"); if (method.getName().startsWith("add") || method.getName().startsWith("create") || method.getName().startsWith("save") || method.getName().startsWith("edit") || method.getName().startsWith("update") || method.getName().startsWith("delete") || method.getName().startsWith("remove")) { System.out.println("切换到: master"); DataSourceSwitcher.setMaster(); } else { System.out.println("切换到: slave"); DataSourceSwitcher.setSlave(); } } // service方法执行完之后被调用 public void afterReturning(Object arg0, Method method, Object[] args, Object target) throws Throwable { } // 抛出Exception之后被调用 public void afterThrowing(Method method, Object[] args, Object target, Exception ex) throws Throwable { DataSourceSwitcher.setSlave(); System.out.println("出现异常,切换到: slave"); } }
以上方法有很多缺点,限制,使用的方法二是以注解的形式实现
方案二(预备)
相关推荐
在应用层透过Spring解决数据库读写分离 数据库读写分离是指将数据库的读取和写入操作分开处理,以提高数据库的性能和可用性。在应用层解决数据库读写分离可以通过Spring框架来实现,本文将介绍如何使用Spring解决...
要实现Spring AOP的多数据库读写分离,我们需要以下步骤: 1. **配置数据源**:首先,我们需要配置多个数据源,一个作为主库(处理写操作),另一个或多个作为从库(处理读操作)。这可以通过Spring的`...
通过以上分析,我们可以看出,Spring、Spring MVC、MyBatis和MySQL的组合,为实现数据库读写分离提供了一种高效且灵活的解决方案。理解并掌握这些知识点,对于提升系统的稳定性和性能具有重要的意义。
本篇文档将详细探讨如何利用Spring框架实现数据库的读写分离,并结合MySQL的主从复制机制,确保系统的稳定运行和高效响应。 ### 背景分析 在实际应用中,许多系统面临着数据读取压力远大于写入压力的情况,这导致...
通过以上步骤和策略,我们可以利用Spring、Spring MVC和MyBatis构建一个高效、稳定的数据库读写分离系统,提升系统的整体性能和可用性。在实际项目中,还需要根据具体需求和业务场景进行相应的调整和优化。
在现代Web应用开发中,数据库读写分离和缓存技术是提高系统性能和可扩展性的关键策略。本项目采用SpringBoot、MyBatis、Druid和Redis这四个核心技术来实现这一目标。以下将详细讲解这些组件如何协同工作,以及它们...
读写分离就是对于一条SQL该选择哪一个数据库去执行,至于谁来做选择数据库这件事,有两个,要么使用中间件帮我们做,要么程序自己做。一般来说,读写分离有两种实现方式。第一种是依靠中间件MyCat,也就是说应用程序...
下面将详细探讨如何利用Spring的特性来解决数据库读写分离的问题。 首先,我们需要理解读写分离的基本概念。读写分离是将数据库的读操作和写操作分配到不同的服务器上,通常主数据库负责写操作,而从数据库处理读...
本项目将这些框架进行了整合,并进行了数据库读写分离的配置,以提高系统的稳定性和性能。 首先,Spring框架作为基础,提供了强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...
Spring框架提供了对MySQL数据库读写分离的良好支持,使得开发者能够轻松地在应用中实现这一功能。 **1. 什么是读写分离** 读写分离是指在数据库系统中,将读操作和写操作分配到不同的服务器上执行,读操作通常发生...
数据库读写分离是一种常见的优化策略,它通过将数据的读取操作和写入操作分散到不同的数据库服务器上,以提高系统的并发处理能力和响应速度。在大型应用系统中,由于读操作通常远多于写操作,读写分离可以显著降低主...
在构建大型分布式系统时,数据库读写分离是一个重要的优化策略,它可以提高系统的可扩展性和性能。本项目结合了Spring、SpringMVC、MyBatis和Maven等技术,与MySQL数据库一起实现读写分离,以提升应用的处理能力。...
最近项目要支持读写分离, 网上找了很多,但都是不太完整,我自己整理了下供大家参考。 我的项目使用的框架: springMvc+spring+hibernate+springJPA+maven, 数据库连接池用阿里的druid。
基于JAVA springboot的SPI的数据库读写分离starter+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于JAVA springboot的SPI的...
基于SpringAOP的数据库读写分离的实现,可以点击查看我的博客,有详细讲解http://blog.csdn.net/qism007
在现代的高并发、大数据量的应用系统中,数据库的读写分离是一种常见的优化策略,它能够有效提升系统的处理能力和响应速度。本示例通过Java的面向切面编程(AOP)技术来实现实现MySQL数据库的读写分离,旨在帮助...
在Java开发领域,数据库读写分离是一种常见的优化策略,它能显著提高系统性能,尤其是在高并发环境下。本项目源码是基于MySQL数据库实现的,利用SSM(Spring、SpringMVC、MyBatis)框架进行开发,旨在帮助开发者快速...
Spring实现数据库读写分离/spring事务配置解释(Annotation/Spring AOP/Reflection)的辅助sql
Spring Boot是流行的Java开发框架,提供了便捷的方式来配置和使用数据库,包括实现数据库读写分离。 1. **MySQL主从复制原理**: 主从复制的核心是binlog(二进制日志),主节点的所有更改操作都会记录在binlog中...