用途:为遵循命令查询分离(CQS)且用数据库事务包裹流程的业务逻辑入口点设置事务隔离级别,前提是底层持久化技术支持可配置隔离级别。
主要能力:查询处理器使用项目数据库可用的阻塞最小隔离级别(优先 READ UNCOMMITTED,其次 READ COMMITTED,再退而求其次);命令处理器显式使用 REPEATABLE READ,以保证业务约束检查与状态变更之间读取的数据稳定,避免不可重复读。只读查询处理器还可选择跳过交互式事务,直接通过连接池读取。
使用方式:在开启事务时通过项目所用库、框架或 ORM 指定隔离级别,不在事务中途更改,并遵循数据库的隔离级别命名约定。隔离级别在调用 runWithinTransaction 时通过选项对象传入;若同时启用执行上下文技能,则外层用 runWithinContext、内层用 runWithinTransaction。仓库从执行上下文取到的事务为 undefined 或 null 时,需为该操作新建独立事务。
适用场景:入口点同时满足四项条件——是业务逻辑入口点、用数据库事务包裹流程、持久化技术支持可配置隔离级别、遵循 CQS 可归类为命令或查询处理器。
限制:持久化技术不支持可配置隔离级别时该技能不适用;不依赖数据库默认级别,除非默认值恰好匹配所需级别。