`

spring的数据库读写分离

阅读更多

方案一

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解决...

    springaop多数据库读写分离

    要实现Spring AOP的多数据库读写分离,我们需要以下步骤: 1. **配置数据源**:首先,我们需要配置多个数据源,一个作为主库(处理写操作),另一个或多个作为从库(处理读操作)。这可以通过Spring的`...

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

    通过以上分析,我们可以看出,Spring、Spring MVC、MyBatis和MySQL的组合,为实现数据库读写分离提供了一种高效且灵活的解决方案。理解并掌握这些知识点,对于提升系统的稳定性和性能具有重要的意义。

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

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

    Spring实现数据库读写分离

    通过以上步骤和策略,我们可以利用Spring、Spring MVC和MyBatis构建一个高效、稳定的数据库读写分离系统,提升系统的整体性能和可用性。在实际项目中,还需要根据具体需求和业务场景进行相应的调整和优化。

    springboot+mybatis+druid+redis实现数据库读写分离和缓存

    在现代Web应用开发中,数据库读写分离和缓存技术是提高系统性能和可扩展性的关键策略。本项目采用SpringBoot、MyBatis、Druid和Redis这四个核心技术来实现这一目标。以下将详细讲解这些组件如何协同工作,以及它们...

    springboot实现mysql的读写分离的案例源码

    读写分离就是对于一条SQL该选择哪一个数据库去执行,至于谁来做选择数据库这件事,有两个,要么使用中间件帮我们做,要么程序自己做。一般来说,读写分离有两种实现方式。第一种是依靠中间件MyCat,也就是说应用程序...

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

    下面将详细探讨如何利用Spring的特性来解决数据库读写分离的问题。 首先,我们需要理解读写分离的基本概念。读写分离是将数据库的读操作和写操作分配到不同的服务器上,通常主数据库负责写操作,而从数据库处理读...

    spring+springmvc+mybatis的整合以及数据库读写分离的测试

    本项目将这些框架进行了整合,并进行了数据库读写分离的配置,以提高系统的稳定性和性能。 首先,Spring框架作为基础,提供了强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    spring mysql 读写分离

    Spring框架提供了对MySQL数据库读写分离的良好支持,使得开发者能够轻松地在应用中实现这一功能。 **1. 什么是读写分离** 读写分离是指在数据库系统中,将读操作和写操作分配到不同的服务器上执行,读操作通常发生...

    数据库读写分离demo

    数据库读写分离是一种常见的优化策略,它通过将数据的读取操作和写入操作分散到不同的数据库服务器上,以提高系统的并发处理能力和响应速度。在大型应用系统中,由于读操作通常远多于写操作,读写分离可以显著降低主...

    spring+springmvc+mybatis+maven+mysql数据库读写分离

    在构建大型分布式系统时,数据库读写分离是一个重要的优化策略,它可以提高系统的可扩展性和性能。本项目结合了Spring、SpringMVC、MyBatis和Maven等技术,与MySQL数据库一起实现读写分离,以提升应用的处理能力。...

    数据库读写分离(aop方式完整实现)

    最近项目要支持读写分离, 网上找了很多,但都是不太完整,我自己整理了下供大家参考。 我的项目使用的框架: springMvc+spring+hibernate+springJPA+maven, 数据库连接池用阿里的druid。

    基于JAVA springboot的SPI的数据库读写分离starter+源码+项目文档(毕业设计&课程设计&项目开发)

    基于JAVA springboot的SPI的数据库读写分离starter+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于JAVA springboot的SPI的...

    基于SpringAOP的数据库读写分离的实现

    基于SpringAOP的数据库读写分离的实现,可以点击查看我的博客,有详细讲解http://blog.csdn.net/qism007

    AOP动态实现MYSQL数据库读写分离

    在现代的高并发、大数据量的应用系统中,数据库的读写分离是一种常见的优化策略,它能够有效提升系统的处理能力和响应速度。本示例通过Java的面向切面编程(AOP)技术来实现实现MySQL数据库的读写分离,旨在帮助...

    JAVA数据库读写分离项目源码(MYSQL)

    在Java开发领域,数据库读写分离是一种常见的优化策略,它能显著提高系统性能,尤其是在高并发环境下。本项目源码是基于MySQL数据库实现的,利用SSM(Spring、SpringMVC、MyBatis)框架进行开发,旨在帮助开发者快速...

    读写分离测试sql

    Spring实现数据库读写分离/spring事务配置解释(Annotation/Spring AOP/Reflection)的辅助sql

    Mysql主从集群搭建方法,以及基于spring boot注解式数据库读写分离代码示例.zip

    Spring Boot是流行的Java开发框架,提供了便捷的方式来配置和使用数据库,包括实现数据库读写分离。 1. **MySQL主从复制原理**: 主从复制的核心是binlog(二进制日志),主节点的所有更改操作都会记录在binlog中...

Global site tag (gtag.js) - Google Analytics