先吐槽下博客园,每天都推荐水帖不说,正经的分享技术的博客还他妈的不让上首页,我在那里投入了那么多汗水,什么垃圾东西。
spring+ibatis实现读写分离
特点
无缝结合spring+ibatis,对于程序员来说,是透明的
除了修改配置信息之外,程序的代码不需要修改任何东西
支持spring的容器事务
规则:
基于spring配置的容器事务
读写事务到主库
只读事务到从库
如果没有配置事务,更新语句全部到主库,查询语句均衡到从库
源码地址
qq讨论群:261502547
快速入门
maven依赖
<dependency>
<groupId>org.springmore</groupId>
<artifactId>springmore-core</artifactId>
<version>1.0.0</version>
</dependency>
1
2
3
4
5
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.xsd
http://www.springframework.org/schema/context
http://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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
整合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>
1
2
3
4
5
6
7
8
9
10
11
12
事务配置(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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
dao代码示例:
@Repository("UserMapperImpl")
public class UserMapperImpl implements UserMapper{
@Autowired
private DynamicSqlSessionTemplate sqlSessionTemplate;
//从库
public List<User> selectByUserNameAndPwd(User user) {
return sqlSessionTemplate.selectList("selectByUserNameAndPwd", user);
}
//主库
public void insert(User user) {
sqlSessionTemplate.insert("insert", user);
}
}
分享到:
相关推荐
快速的掌握读写分离+分表的实战,即插即用适用人群IT从业人员,开发人员,Java从业者,互联网从业者,性能调优人群课程简介 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈。 它由Sharding-JDBC...
基于这样的背景下,我开源了本示例项目,方便大家快速上手Spring Boot、Spring Cloud 。 每个示例都带有详细的介绍文档、作者在使用过程中踩过的坑、解决方案及参考资料,方便快速上手为你提供学习捷径,少绕弯路...
java8 源码 #spring-boot-dubbo...读写分离 各个模块pom介绍 ###parent <groupId>org.springframework.boot <artifactId>spring-boot-starter-parent <version>1.4.3.RELEASE ……………… <groupId>org.spri
该项目是基于dubbo分布式微服务框架的完整商业项目源码,项目的主体框架为dubbo +spring+mybatis,涵盖了Redis、读写分离、CMS、分布式部署nginx、Restful API开发、HttpClient、FastDFS、Zookeeper、keepalive等多...
本项目是一个基于SSM(Spring、SpringMVC、MyBatis)和Vue.js框架开发的打飞机游戏,旨在通过实践探索现代Web技术在游戏开发中的应用,并提高用户交互体验。此外,项目也致力于实现高性能的游戏运行效率和优良的用户...
8-1 功能梳理和数据库设计 8-2 文件存储设计方案一 8-3 文件存储设计方案二 第9章 子模块-数据库操作模块 hos服务基础数据库选用mysql,本章实现基于SpringBoot+Mybatis的mysql数据库的操作模块,采用c3p0连接池,...
11、 在数据库存储方面使用MySQL的主从复制架构,使用Spring的AOP实现数据的读写分离,以保证在“读多写少”的场景下的高性能。 12、 使用高性能的企业级消息系统RabbitMQ,完了系统间的通信,使得系统间的耦合度...
xml java系统源码 iBase4J项目简介 iBase4J是Java语言的分布式系统架构。...aop切换数据库实现读写分离。Transtraction注解事务。 MVC: 基于spring mvc注解,Rest风格Controller。Exception统一管理。 调度:Spr
aop切换数据库实现读写分离。Transtraction注解事务。 MVC: 基于spring mvc注解,Rest风格Controller。Exception统一管理。 调度:Spring+quartz, 可以查询、修改周期、暂停、删除、新增、立即执行,查询执行记录等...
他们均提供标准化的数据分片、读写分离、柔性事务和数据治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Sharding-JDBC可以通过Java,YAML,Spring命名空间和Spring Boot Starter四种...
【资源说明】 1、基于springboot微服务架构的班车预约系统(源码+数据库+项目说明).zip 2、该资源包括项目的全部源码,下载...6. 接下来的计划是 MySQL 读写分离、Redis 读写分离、以及分布式唯一 ID、集群管理等。
小诗科技2.0开源平台单工程工作流版本, 采用技术为: spring,springBoot,Mybatis,Mysql,Redis,Activiti,自研BPM可视化设计器兼容IE,火狐,谷歌,360等浏览器,集成系统性能监控模块,tk压缩,VUE,数据库...
实现基于多数据源(datasource)的读写分离、主备切换、故障转移、恢复检测和负载均衡 使用该组件必须遵循以下规则: 在使用DTO时,字段名称与数据库表字段一致,也可以不使用任何DTO类。 不支持连表查询,主要是单表...
SpringMvc_day01.spring入门-springMVC三大核心器(视图解析器,处理器映射器and适配器).springMvc整合myBatis SpringMvc_day02高级参数.上传图片.JSON数据交互.拦截器 15-SSM企业案例-客户管理系统(学习1天) ...
xml java系统源码 iBase4J项目简介 iBase4J是Java语言的分布式系统架构。...aop切换数据库实现读写分离。Transtraction注解事务。 MVC: 基于spring mvc注解,Rest风格Controller。Exception统一管理。 调度:Spr
xml java系统源码 iBase4J的SpringBoot版本 ...aop切换数据库实现读写分离。Transtraction注解事务。 MVC: 基于spring mvc注解,Rest风格Controller。Exception统一管理。 调度:Spring+quartz, 可以查询、修改周
集成mybatis,druid数据库连接池(是否可以动态修改连接数),多数据源(读写分离,主从数据库同步的延迟), 分页:https://github.com/pagehelper/Mybatis-PageHelper(完成) 集成jpa(完成,集成了mybatis工具包后基本...
基于MyBatis拦截器实现主从数据源的动态切换 支持类、方法级别添加注解 SwitchDataSource 来手动切换目标数据源 可实现 DynamicDataSourceStrategy 接口并自定义动态数据源选择策略。默认提供轮询、随机两种 集成...
aop切换数据库实现读写分离。Transaction注解事务。3、MVC:基于spring mvc注解,Rest风格Controller。Exception统一管理。4、调度:Spring+quartz, 可以查询、修改周期、暂停、删除、新增、立即执行,查询执行记录...
SBORM只是针对spring jdbc的一些不方便的地方,做了一些封装,更加简化日常的开发工作,基于spring jdbc的RowMapper自动实现对象映射,也勉强算的上叫ORM,只是大部分功能已经由spring jdbc实现了。 平时不太...