Skip to content

编排中的事务分析

事务将确保逻辑编排中多个任务同时成功或失败,需要事务时,可用事务子流程,使用场景分析

事务类型

名称代码说明
JTA事务jta分布式事务,支持多个数据源
JDBC事务jdbc本地事务,支持一个数据源
不启用事务none没有事务,支持多个数据源

只读事务

JDBC事务有只读和读写之分。 只读事务适用于批量执行多个查询语句,确保数据一致性。

事务传播

方式名称说明实现
required需要默认,存在则加入,不存在则创建事务
required_new新建必须创建新事务事务+隔离
supports支持存在则加入,不存在则不用事务不需要事务
mandatory必须存在则加入,不存在则抛出异常暂无场景,不必支持
not_supported不支持不在事务中执行禁用事务
never没有事务必须不存在事务,否则抛出异常暂无场景,不必支持
nested内嵌事务savepoint实现可用多个事务和逻辑判断实现,不必支持

流程相关设置

事务类型

类型说明
JTA事务当事务范围内有多个数据源时
JDBC读写事务当事务范围内只有一个数据源时
JDBC只读事务事务范围内多个数据源时,会分割成连续的多个只读事务
禁用事务独立在事务机制之外执行

事务独立

是否独立说明
独立启用新事务
不独立与父事务融合

嵌套分析之一

通过嵌套的事务类型来分析独立性

父事务
JTAJDBC只读禁用
子事务JTA?独立独立独立
JDBC??独立独立
只读独立独立传递独立
禁用独立独立独立传递

嵌套分析之二

通过嵌套的事务的部分类型+部分子事务的隔离性,来分析剩余事务类型和独立性的判断

父事务
读写只读禁用
子事务读写传递独立独立
读写+隔离独立独立独立
只读独立传递独立
只读+隔离独立独立独立
禁用独立独立独立

嵌套时,可传递的情况,分析数据源数量

数据源读写只读
一个JDBC读写JDBC只读
多个JTA

事务需求

需要新建
JTAYY
JDBCYY
JDBC只读YY
禁用-

事务管理器

java
/**
 * 开启事务
 */
void begin();
/**
 * 提交事务
 */
void commit();
/**
 * 回滚事务
 */
void rollback();
/**
 * 事务是否可以传播
 * 根据JTA、JDBC、JDBC只读、空等类型判断是否相同,相同可传播
 */
boolean canPropagate(Transaction transaction);
/**
 * 获取连接
 * JDBC事务中只能有一个数据源连接,需要复用
 * JTA事务中也需要把相同数据源的连接复用
 */
Connection getConnection(DataSrouce dataSource);