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

Lists

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操作配置

```












































```