事务
基本机制
创建数据库连接之后,我们使用该数据库连接创建事务管理器。
GoooQo中的事务管理通过TransactionManager和TransactionContext(以下简称TC)配合完成。
TransactionManager
中的方法StartTransaction
负责开启事务并返回TC;TC组合了driver.Tx
,负责事务的提交和回滚。
TxDataAccess接口组合了DataAccess和TransactionManager
,可以在实现数据库访问接口的同时,更方便的进行事务管理。
事务使用示例
使用TransactionManager#StartTransaction
开启事务,手动提交或者回滚事务:
或者使用TransactionManager#SubmitTransaction
通过回调的方式提交事务:
事务的传播管理
在Spring的事务传播机制中定义了以下7个级别,GoooQo
中的对应处理方式如下:
REQUIRED
使用任意context调用
TxDataAccess
的StartTransaction
:如果context为TC,则将context强制转化为TC后返回;
如果context不是TC,则调用
db#BeginTx
开启事务获取sql.Tx
,再通过context和sql.Tx
创建TC后返回。SUPPORTS
使用任意
Context
调用TxDataAccess
的数据库访问方法。REQUIRES_NEW
当
ctx
为TC时,使用ctx.(TC).Context
开启事务; 当ctx
不为TC时,使用ctx
开启事务;NOT_SUPPORTED
当
ctx
为TC时,使用ctx.(TC).Context
调用TxDataAccess
的数据库访问方法; 当ctx
不为TC时,使用ctx
调用TxDataAccess
的数据库访问方法;MANDATORY:
对传入的
ctx
不是TC的情况进行处理。NEVER
对传入的
ctx
是TC的情况进行处理。NESTED
使用TC的
SavePoint/RollbackTo
方法。
这里整理了一个表格对前4个传播级别进行了对比:
最后更新于