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);