Spring+SpringMVC+MyBatis框架中,使用ReplicationDriver,用最简单的方式实现读写分离的详细方案。

本文详细介绍在Spring+SpringMVC+MyBatis框架下,使用com.mysql.jdbc.ReplicationDriver实现MySQL数据库读写分离的具体步骤。涵盖多数据源配置、Spring配置文件设置、事务管理等方面,适用于Spring 4.2.4版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring+SpringMVC+MyBatis框架中,com.mysql.jdbc.ReplicationDriver快速实现读写分离的详细方案。

环境介绍:

Spring为4.2.4.RELEASE版本

数据库为MySQL

JDK为1.7.0版本

项目结构为:

下载源码完整项目 

具体步骤:

一、数据库及SQL脚本

数据库使用的Mysql数据库,版本没要求,创建表结果的SQL如下:

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`datasourcedynamic` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `datasourcedynamic`;


DROP TABLE IF EXISTS `cost`;
CREATE TABLE `cost` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `money` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1713 DEFAULT CHARSET=utf8;

二、多数据源配置说明

多数据源配置,主要是如何配置多数据源连接,jdbc.properties文件内容为:

jdbc.driverClassName=com.mysql.jdbc.ReplicationDriver
jdbc.url=jdbc:mysql://{读写库IP},{读库IP}:3306/datasourcedynamic?useUnicode=true&characterEncoding=utf-8
jdbc.username={您的数据库账号}
jdbc.password={您的数据库密码}

三、Spring配置文件

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">

   <context:component-scan base-package="com.zrscsoft"/>

   <context:property-placeholder location="classpath:jdbc.properties" />

   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
      init-method="init" destroy-method="close">
      <property name="driverClassName" value="${jdbc.driverClassName}" />
      <property name="url" value="${jdbc.url}" />
      <property name="username" value="${jdbc.username}" />
      <property name="password" value="${jdbc.password}" />
      <!-- 配置初始化大小、最小、最大 -->
      <property name="initialSize" value="1" />
      <property name="minIdle" value="1" />
      <property name="maxActive" value="10" />
      <!-- 配置获取连接等待超时的时间 -->
      <property name="maxWait" value="10000" />
      <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
      <property name="timeBetweenEvictionRunsMillis" value="60000" />
      <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
      <property name="minEvictableIdleTimeMillis" value="300000" />
      <property name="testWhileIdle" value="true" />
      <!-- 这里建议配置为TRUE,防止取到的连接不可用
      testOnBorrow:申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
      testOnReturn:归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
      <property name="testOnBorrow" value="true" />
      <property name="testOnReturn" value="false" />
      <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
      <property name="poolPreparedStatements" value="true" />
      <property name="maxPoolPreparedStatementPerConnectionSize"
         value="20" />
   </bean>

   <!-- mybatis -->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource"></property>
      <property name="configLocation" value="classpath:mybatis-config.xml"></property>
      <property name="mapperLocations" value="classpath:com/zrscsoft/mapper/*.xml"></property>
   </bean>
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
      <property name="basePackage" value="com.zrscsoft.mapper"></property>
   </bean>

   <!-- 添加事务管理 -->
   <tx:annotation-driven transaction-manager="transactionManager" />

   <bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"></property>
   </bean>
   <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
      <tx:attributes>
         <tx:method name="insert" propagation="REQUIRED" />
         <tx:method name="save*" propagation="REQUIRED" />
         <tx:method name="update*" propagation="REQUIRED" />

         <tx:method name="selectByPrimaryKey" read-only="true"/>

         <tx:method name="*" propagation="SUPPORTS" />
      </tx:attributes>
   </tx:advice>
   <aop:config>
      <aop:pointcut id="transactionPointcut" expression="execution(* com.zrscsoft.service..*(..))" />
      <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" order="2" />
   </aop:config>
</beans>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值