Skip to content

事务 ​

@transactional 只声明元数据,应用级 AOP 的 TransactionInterceptor 执行事务。同步方法选择 PlatformTransactionManager,异步方法选择 AsyncPlatformTransactionManager;可由 transaction_manager 指定 Bean 名,否则按类型和 primary 解析,缺失或歧义均报错。

python
from pythonboot import Isolation, Propagation, transactional

class OrderService:
    @transactional(
        propagation=Propagation.REQUIRED,
        isolation=Isolation.READ_COMMITTED,
        timeout=30, read_only=False, name="create-order",
        rollback_for=(BusinessError,), no_rollback_for=(ValidationError,),
        transaction_manager="databaseTransactionManager",
    )
    def create(self, command: CreateOrder) -> Order: ...
参数默认值说明
propagationREQUIREDREQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED
isolationDEFAULTDEFAULT、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE
timeout-1-1 为资源默认值;否则非负秒数
read_onlyFalse只读提示,管理器必须支持或明确拒绝
nameNone非空事务名
rollback_for(Exception,)触发回滚的异常类型集合
no_rollback_for()不触发回滚的异常类型集合
transaction_managerNone管理器 Bean 名

更具体异常规则优先;同等匹配时 no_rollback_for 优先。BaseException 中非 Exception 的取消/致命异常始终回滚。加入已有事务的内层作用域不独立提交,回滚会标记共享事务 rollback-only,外层提交抛 UnexpectedRollbackError。NESTED 要求管理器实现相应的保存点能力。

Starter 应实现同步或异步管理器接口的 get_transaction(definition=None)、commit(status)、rollback(status);TransactionStatus 提供新事务、参与事务、保存点、rollback-only 与完成状态。

Spring Boot 对照 ​

java
@Transactional(
    propagation = Propagation.REQUIRED,
    isolation = Isolation.READ_COMMITTED,
    timeout = 30,
    rollbackFor = BusinessError.class,
    noRollbackFor = ValidationError.class,
    transactionManager = "databaseTransactionManager"
)
public Order create(CreateOrder command) {
    // ...
}