Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chengdedeng/perseus
:zap:database read and write separation of java
https://github.com/chengdedeng/perseus
database-separation datasource java-mybatis-spring read-write-separation transaction
Last synced: 21 days ago
JSON representation
:zap:database read and write separation of java
- Host: GitHub
- URL: https://github.com/chengdedeng/perseus
- Owner: chengdedeng
- Created: 2017-06-22T13:29:41.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2018-03-01T06:36:34.000Z (over 6 years ago)
- Last Synced: 2024-03-03T06:32:59.788Z (4 months ago)
- Topics: database-separation, datasource, java-mybatis-spring, read-write-separation, transaction
- Language: Java
- Homepage: https://github.com/chengdedeng/perseus
- Size: 79.1 KB
- Stars: 121
- Watchers: 20
- Forks: 44
- Open Issues: 0
-
Metadata Files:
- Readme: README-ZH.md
Lists
- awesome-stars - perseus
README
[![Join the chat at https://gitter.im/chengdedeng/perseus](https://badges.gitter.im/chengdedeng/perseus.svg)](https://gitter.im/chengdedeng/perseus?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
## [English document](/README-ZH.md)### 项目介绍
数据库读写分离是再基础不过的需求了,读写分离通常有三种方案实现:
1. 多数据源,通过代码硬编码实现.
2. 修改ORM框架实现.
3. 实现数据库协议来实现.方案一最简单,但是开发人员工作量最大,并且容易犯错;虽然方案三开发人员来说是透明的且不限制编程语言,但是开发难度最大且数据库的支持范围
较窄.本项目基于方案二,选择了Java中最流行的Mybatis和Spring来实现,所以只适用于基于Mybatis+Spring实现的Java项目.### 功能
1. 事务一律到主库,不区分transaction是否是readonly.由于readonly并不真正的启动事务,只是激活transaction synchronization,因此并不会被[DynamicDataSourceTransactionManager](/src/main/java/info/yangguo/perseus/DynamicDataSourceTransactionManager.java)截获,
所以就被default(master database)设置命中,并且一个read only transaction中的所有语句的执行都会复用同一个JDBCConnection(SqlSession).
2. select到读库,insert/update/delete到主库.
3. 支持select强制路由到主库(尽量避免,通过业务逻辑优化来绕过).
4. 支持mybatis-spring中的batch操作.### 稳定度
该项目在笔者公司,上百个项目中广泛应用,已经很成熟,测试代码中有详细的配置和测试代码.### 核心配置
#### 常规配置
```
```#### batch操作配置
```
```