springmore-core

spring+ibatis实现读写分离

  • 特点
    无缝结合spring+ibatis,对于程序员来说,是透明的
    除了修改配置信息之外,程序的代码不需要修改任何东西
    支持spring的容器事务

  • 规则:
  1. 基于spring配置的容器事务
  2. 读写事务到主库
  3. 只读事务到从库
  4. 如果没有配置事务,更新语句全部到主库,查询语句均衡到从库
    实现源码:https://gitcafe.com/tangyanbo/springmore
    下载spring-core即可
  • 快速入门
    maven依赖
<dependency><groupId>org.springmore</groupId><artifactId>springmore-core</artifactId><version>1.0.0</version>
</dependency>

dataSource配置(applicationContext.xml中)

<?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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- C3P0连接池配置 --><bean id="master" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass"><value>com.mysql.jdbc.Driver</value></property><property name="jdbcUrl"><value>jdbc:mysql://192.168.1.246:3306/db1</value></property><property name="user"><value>ysb</value></property><property name="password"><value>ysb</value></property><property name="initialPoolSize"><value>20</value></property><property name="minPoolSize"><value>20</value></property><property name="maxPoolSize"><value>200</value></property><property name="maxIdleTime"><value>255000</value></property></bean><bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass"><value>com.mysql.jdbc.Driver</value></property><property name="jdbcUrl"><value>jdbc:mysql://192.168.1.246:3306/db2</value></property><property name="user"><value>ysb</value></property><property name="password"><value>ysb</value></property><property name="initialPoolSize"><value>20</value></property><property name="minPoolSize"><value>20</value></property><property name="maxPoolSize"><value>200</value></property><property name="maxIdleTime"><value>255000</value></property></bean><bean id="dataSource3" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass"><value>com.mysql.jdbc.Driver</value></property><property name="jdbcUrl"><value>jdbc:mysql://192.168.1.246:3306/db3</value></property><property name="user"><value>ysb</value></property><property name="password"><value>ysb</value></property><property name="initialPoolSize"><value>20</value></property><property name="minPoolSize"><value>20</value></property><property name="maxPoolSize"><value>200</value></property><property name="maxIdleTime"><value>255000</value></property></bean><bean id="dataSource" class="org.springmore.core.datasource.DynamicDataSource"><property name="master" ref="master" />     <property name="slaves"><list><ref bean="dataSource2"/><ref bean="dataSource3"/></list>         </property></bean>
</beans>

整合mybatis配置(applicationContext.xml中)

    <!-- ibatis3 工厂类 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:sqlMapConfig.xml" /></bean><bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory" /></bean><bean id="dynamicSqlSessionTemplate" class="org.springmore.core.datasource.DynamicSqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionTemplate" /></bean>

事务配置(applicationContext.xml中)

    <!-- 定义单个jdbc数据源的事务管理器 --><bean id="transactionManager"class="org.springmore.core.datasource.DynamicDataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 以 @Transactional 标注来定义事务  --><tx:annotation-driven transaction-manager="transactionManager"proxy-target-class="true" />        <!-- 配置事务的传播特性 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="insert*" propagation="REQUIRED" read-only="false"rollback-for="Exception" /><tx:method name="delete*" propagation="REQUIRED" read-only="false"rollback-for="Exception" /><tx:method name="update*" propagation="REQUIRED" read-only="false"rollback-for="Exception" /><tx:method name="proc*" propagation="REQUIRED" read-only="false"rollback-for="Exception" /><tx:method name="select*" read-only="true" /><tx:method name="*" read-only="false" /><!-- <tx:method name="*" read-only="true" /> --></tx:attributes></tx:advice><!-- 那些类的哪些方法参与事务 --><aop:config><aop:pointcut id="allManagerMethod" expression="execution(* org.springmore.core.dao..*(..))" /><aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" /></aop:config>

dao代码示例:

@Repository("UserMapperImpl")
public class UserMapperImpl implements UserMapper{@Autowiredprivate DynamicSqlSessionTemplate sqlSessionTemplate;//从库public List<User> selectByUserNameAndPwd(User user) {return sqlSessionTemplate.selectList("selectByUserNameAndPwd", user);}//主库public void insert(User user) { sqlSessionTemplate.insert("insert", user);      }
}

转载于:https://www.cnblogs.com/tangyanbo/p/4601220.html

spring+mybatis实现读写分离相关推荐

  1. Spring 实现数据库读写分离

    Spring 实现数据库读写分离 现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然 ...

  2. 秒懂MyBatis之读写分离简单实现

    [版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 文章目录 概述 原理 实现 搭建主备份数据库 配置多数据源 配置MyBatis 使用AOP改进 如何使用 测试: 总结 概述 ...

  3. spring MVC、mybatis配置读写分离

    第一種方法: 當後端MYSQL服務器群是master-master雙向同步機制時,前端應用使用JDBC連接數據庫可以使用loadbalance方式,如下所示: jdbc:mysql:loadbalan ...

  4. Spring Boot + MyBatis + MySQL读写分离

    今日推荐 借助Redis锁,完美解决高并发秒杀问题还在直接用JWT做鉴权?JJWT真香Spring Boot 操作 Redis 的各种实现Fluent Mybatis 牛逼!Nginx 常用配置清单这 ...

  5. SpringBoot + MyBatis + MySQL 读写分离实战

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://t.cn/AiKuJEB9 1. 引言 读写分 ...

  6. Spring 实现数据库读写分离(转)

    现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询.因为在实际的应 ...

  7. boot lib分离 spring_SpringBoot+MyBatis+MySQL读写分离(实例)A

    1. 引言 读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做.因此,一般来讲,读写分离有两种实现方式.第一种是依靠 ...

  8. spring mysql 读写分离_如何利用Spring实现数据库读写分离?

    现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询.因为在实际的应 ...

  9. Springboot Mybatis MySQL读写分离及事物配置

    为什么需要读写分离 当项目越来越大和并发越来大的情况下,单个数据库服务器的压力肯定也是越来越大,最终演变成数据库成为性能的瓶颈,而且当数据越来越多时,查询也更加耗费时间,当然数据库数据过大时,可以采用 ...

最新文章

  1. mysql alter算法_MySQL ALTER语法的运用方法 操作索引和字段
  2. 白话Elasticsearch43-深入聚合数据分析之案例实战__排序:按每种颜色的平均销售额升序排序
  3. left join 和 left outer join 的区别【转】
  4. 【CV】54篇最新CV领域综述论文速递!涵盖14个方向:目标检测/图像分割/医学影像/人脸识别等方向...
  5. dlib 怎么安装vs2017_win10中的dlib库安装过程
  6. 边缘检测后去除噪点_修图前vs修图后,原来那些网红“照骗”都是这样修出来的!...
  7. java计算器流程图_帮帮忙:Java小计算器代码,及需求分析.流程图.
  8. IS-IS(笔记整理)
  9. 今天的虎兄才跳了过去的飞秋WZ132
  10. SAP License:SAP问题二则
  11. Julia :迎接0.6的到来
  12. java方面的文献综述怎么写_关于java的文献综述
  13. cad文件管理服务器,CAD文件管理(ZT)
  14. 雷塞控制器SMC304简单介绍
  15. 傲腾服务器系统,服务器加傲腾内存
  16. 卖肉了也没火的十大悲催女星
  17. 特定软件无法联网,nslookup无法解析任何地址,但是其他业务工作正常的故障...
  18. 服务器白屏是系统在更新吗,远程服务器白屏怎么处理
  19. python-opencv 读取摄像头并保存为.mp4视频 及 VideoCapture()的使用
  20. Apache配置与应用

热门文章

  1. 《计算机网络》_学习笔记(一)
  2. 图论--LCA--树上倍增法(在线)
  3. 51 NOD 1049 最大子段和 动态规划 模板 板子 DP
  4. P1465 序言页码 Preface Numbering (手推)
  5. 信息类产品检测培训讲义-EN55024
  6. excel的快捷键ctrl+;无效
  7. gan学到的是什么_GAN推动生物学研究
  8. uboot: RTL8201 100M PHY驱动代码
  9. 买房申请房贷被拒,首付款要打水漂了吗?
  10. 看奥运之五:关于“鸟巢”、“水立方”的数据和内涵