`
dsxwjhf
  • 浏览: 73616 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

Mysql 读写分离的 Java 实现

阅读更多
先上代码

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceHolder.getDataSourceKey();
    }
}
public class DataSourceHolder {
    private static final ThreadLocal<String> threadLocal = new ThreadLocal<String>();
    public static String getDataSourceKey() {
        return threadLocal.get();
    }
    public static void setDataSourceKey(String dataSourceKey) {
        threadLocal.set(dataSourceKey);
    }
}
<bean id="dataSource" class="com.wjxie.test.DynamicDataSource">
    <property name="targetDataSources">
        <map key-type="java.lang.String">
            <entry key="master" value-ref="data_source_master" />
            <entry key="slave" value-ref="data_source_slave" />
        </map>
    </property>
    <property name="defaultTargetDataSource" ref="data_source_master" />
</bean>


最后定义切面(Advisor):在 Service 方法执行之前执行:若请求路径为 get/load/select/fetch 什么的,则执行 DataSourceHolder.setDataSourceKey("slave") ,否则执行 DataSourceHolder.setDataSourceKey("master") 。如有特殊需要,可以在方法体内手工指定想要使用的数据源。

AbstractRoutingDataSource 原理:
DynamicDataSource 在 getConnection() 时,会根据其 determineCurrentLookupKey() 返回的结果( "master" 或 "slave" ),去 Spring 配置文件里面查找对应的 targetDataSource 是 "data_source_master" 还是 "data_source_slave" ,然后建立其连接。
分享到:
评论

相关推荐

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

    一般来说,读写分离有两种实现方式。第一种是依靠中间件MyCat,也就是说应用程序连接到中间件,中间件帮我们做SQL分离,去选择指定的数据源;第二种是应用程序自己去做分离。这里我用程序自己来做,主要是利用Spring...

    使用mysql-proxy实现mysql读写分离

    ### 使用mysql-proxy实现MySQL读写分离 随着业务规模的不断扩大,数据库系统往往成为整个系统中的瓶颈之一。为了提高系统的响应速度以及数据处理能力,一种常用的技术手段就是采用**读写分离**的方式。读写分离的...

    spring mysql 读写分离

    Spring与MySQL读写分离** Spring作为一个灵活的Java应用程序框架,提供了多种方式来支持数据库的读写分离。通过配置数据源、事务管理器以及AOP(面向切面编程)等机制,Spring可以帮助我们透明地处理读写操作的路由...

    突破Java面试(50)-MySQL读写分离及主从同步延时解决方案.docx

    实现MySQL读写分离的基础是构建一个“主从复制”的架构。具体步骤包括: - 配置一个主数据库,负责处理所有写操作(如INSERT、UPDATE等); - 设置一个或多个从数据库,仅用于处理读操作; - 主数据库通过日志...

    基于Mycat实现Mysql读写分离以及分库分表.doc

    基于Mycat实现Mysql读写分离以及分库分表详解 本文档详细介绍了基于Mycat实现Mysql读写分离以及分库分表的技术,涵盖了Mycat安装、配置、读写分离、分库分表等多方面的知识点。 一、读写分离 Mycat读写分离是指将...

    spring之mysql读写分离

    本文将深入探讨如何利用Spring AOP(面向切面编程)实现应用层的MySQL读写分离,并结合一主多从的配置来进行详细讲解。 首先,我们需要理解MySQL的主从复制机制。在主从复制中,数据的写操作(INSERT、UPDATE、...

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

    本项目源码是基于MySQL数据库实现的,利用SSM(Spring、SpringMVC、MyBatis)框架进行开发,旨在帮助开发者快速理解和实践读写分离技术。 首先,我们来理解一下“读写分离”的概念。读写分离是指在分布式数据库系统...

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

    本示例通过Java的面向切面编程(AOP)技术来实现实现MySQL数据库的读写分离,旨在帮助开发者理解如何在实际项目中应用这一技术。 首先,我们要理解什么是AOP(Aspect-Oriented Programming)。AOP是面向切面编程的...

    MySQL 读写分离实例详解

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

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

    ## 使用Spring实现读写分离(MySQL实现主从复制) ### 概述 随着业务量的增长和技术的发展,单一数据库往往无法满足日益增长的数据处理需求。对于读多写少的应用场景,采用数据库集群的方式进行读写分离是一种常见...

    Spring+mysql读写分离

    本示例"Spring+MySQL+MyBatis+SpringMVC 读写分离"是针对这种策略的一个实现,旨在帮助开发者理解如何在实际项目中应用这一技术。下面将详细介绍这个Demo中的关键知识点。 首先,我们要理解什么是读写分离。读写...

    SpringMVC + 德鲁伊+mybatis +mysql 读写分离

    SpringMVC、德鲁伊(Druid)、MyBatis 和 MySQL 是四个在Java Web开发中常用的组件,它们各自承担着不同的职责,而将它们结合在一起则可以构建出一个高效、可扩展的数据库读写分离解决方案。 SpringMVC是Spring框架...

    基于Mycat的MySQL主从读写分离配置详解与示例

    本文将详细介绍如何利用Mycat这一开源数据库中间件实现MySQL数据库的主从读写分离,并通过具体的配置步骤及示例进行说明。 #### 二、Mycat简介 Mycat是一款开源的数据库连接池产品,它位于Java应用程序和数据库...

    mysql5.7 双主互备、高可用、读写分离 + keepalived 实战演练

    MySQL 5.7 双主互备、高可用与读写分离是数据库系统设计中的重要概念,用于确保数据的稳定性和服务的连续性。在这个实战演练中,我们将深入探讨如何配置和实现这些特性,以及如何结合 keepalived 来增强系统的可用性...

    springboot 实现mysql读写分离 通过aop 并且根据方法名进行分类 实现读写分离

    在这个场景中,我们将探讨如何利用Spring Boot、AOP(面向切面编程)以及MySQL数据库来实现数据的读写分离,从而提高系统的性能和可扩展性。 首先,我们需要理解什么是数据读写分离。在大型系统中,为了减轻主...

    MySQL主从同步与读写分离配置图文详解

    ### MySQL主从同步与读写分离配置详解 #### 一、实验目的 在现代的生产环境中,单一的MySQL服务器往往无法满足对数据处理的安全性、高可用性和高并发的需求。因此,采用**主从同步(Master-Slave Replication)**...

    MySQL读写分离配置图文详解(案例).pdf

    MySQL读写分离是一种常见的数据库优化策略,特别是在高并发和大数据量的场景下,它可以有效提高系统的性能和稳定性。本文将详细介绍如何配置MySQL的读写分离,以案例的形式进行阐述。 首先,理解读写分离的基本原理...

    实现MySQL群集读写分离.pdf

    在MySQL环境下,通过特定的配置和工具,我们可以实现读写分离,使得主数据库(主节点)处理写操作,而从数据库(从节点)处理读操作,从而减轻主数据库的压力,提升整体系统的性能。 实现MySQL群集读写分离通常涉及...

    Amoeba搞定mysql主从读写分离

    总之,Amoeba作为一款Java环境下的MySQL读写分离解决方案,通过智能的分片策略和高可用性设计,能够有效提升系统的读取性能和容错能力。但在实际应用中,需要结合业务需求和技术限制,合理选择和配置,才能发挥其...

Global site tag (gtag.js) - Google Analytics