Appearance
编排中的事务分析
事务将确保逻辑编排中多个任务同时成功或失败,需要事务时,可用事务子流程,使用场景分析
事务类型
| 名称 | 代码 | 说明 |
|---|---|---|
| JTA事务 | jta | 分布式事务,支持多个数据源 |
| JDBC事务 | jdbc | 本地事务,支持一个数据源 |
| 不启用事务 | none | 没有事务,支持多个数据源 |
只读事务
JDBC事务有只读和读写之分。 只读事务适用于批量执行多个查询语句,确保数据一致性。
事务传播
| 方式 | 名称 | 说明 | 实现 |
|---|---|---|---|
| required | 需要 | 默认,存在则加入,不存在则创建 | 事务 |
| required_new | 新建 | 必须创建新事务 | 事务+隔离 |
| supports | 支持 | 存在则加入,不存在则不用事务 | 不需要事务 |
| 必须 | 存在则加入,不存在则抛出异常 | 暂无场景,不必支持 | |
| not_supported | 不支持 | 不在事务中执行 | 禁用事务 |
| 没有事务 | 必须不存在事务,否则抛出异常 | 暂无场景,不必支持 | |
| 内嵌事务 | savepoint实现 | 可用多个事务和逻辑判断实现,不必支持 |
流程相关设置
事务类型
| 类型 | 说明 |
|---|---|
| JTA事务 | 当事务范围内有多个数据源时 |
| JDBC读写事务 | 当事务范围内只有一个数据源时 |
| JDBC只读事务 | 事务范围内多个数据源时,会分割成连续的多个只读事务 |
| 禁用事务 | 独立在事务机制之外执行 |
事务独立
| 是否独立 | 说明 |
|---|---|
| 独立 | 启用新事务 |
| 不独立 | 与父事务融合 |
嵌套分析之一
通过嵌套的事务类型来分析独立性
| 父事务 | |||||
|---|---|---|---|---|---|
| JTA | JDBC | 只读 | 禁用 | ||
| 子事务 | JTA | ? | 独立 | 独立 | 独立 |
| JDBC | ? | ? | 独立 | 独立 | |
| 只读 | 独立 | 独立 | 传递 | 独立 | |
| 禁用 | 独立 | 独立 | 独立 | 传递 | |
嵌套分析之二
通过嵌套的事务的部分类型+部分子事务的隔离性,来分析剩余事务类型和独立性的判断
| 父事务 | ||||
|---|---|---|---|---|
| 读写 | 只读 | 禁用 | ||
| 子事务 | 读写 | 传递 | 独立 | 独立 |
| 读写+隔离 | 独立 | 独立 | 独立 | |
| 只读 | 独立 | 传递 | 独立 | |
| 只读+隔离 | 独立 | 独立 | 独立 | |
| 禁用 | 独立 | 独立 | 独立 | |
嵌套时,可传递的情况,分析数据源数量
| 数据源 | 读写 | 只读 |
|---|---|---|
| 一个 | JDBC读写 | JDBC只读 |
| 多个 | JTA |
事务需求
| 需要 | 新建 | |
|---|---|---|
| JTA | Y | Y |
| JDBC | Y | Y |
| JDBC只读 | Y | Y |
| 禁用 | - | |
事务管理器
java
/**
* 开启事务
*/
void begin();
/**
* 提交事务
*/
void commit();
/**
* 回滚事务
*/
void rollback();
/**
* 事务是否可以传播
* 根据JTA、JDBC、JDBC只读、空等类型判断是否相同,相同可传播
*/
boolean canPropagate(Transaction transaction);
/**
* 获取连接
* JDBC事务中只能有一个数据源连接,需要复用
* JTA事务中也需要把相同数据源的连接复用
*/
Connection getConnection(DataSrouce dataSource);