SuperAPI AI 工具集

transactional-patterns

通用与其它

查看项目

更新于 10-15 23:58

技能介绍

用途:在 Spring Boot 3 项目中定义或排查数据库事务边界、回滚、传播行为、乐观锁重试与提交后事件。

主要能力:把多步业务事务放在应用/服务边界,保留 Spring Data 仓库事务;默认传播为 REQUIRED,读操作可用 readOnly = true(仅为优化提示,不等于写保护或读副本路由);支持 REQUIRES_NEW、SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER 等传播行为;处理检查型异常需显式 rollbackFor;乐观锁用 @Version,冲突后应回滚并在新事务中重试;提交后副作用可用 @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT),但仅为尽力而为,不提供持久重试;分布式场景建议 Saga,把待处理订单、Saga 状态与出站命令放在同一本地事务提交,命令在事务外派发并使用幂等键。

使用方式:修改传播前先检查 Boot/Framework 版本、事务管理器、持久化技术、回滚配置与调用方;服务模板示例:@Service @RequiredArgsConstructor @Transactional(readOnly = true) 类级默认,写方法用 @Transactional 覆盖;避免自调用(this 调用会绕过代理),需将独立事务操作抽到另一个 bean;REQUIRES_NEW 需额外连接,注意连接池容量与锁竞争。

适用场景:订单创建、库存预留、审计日志、乐观锁并发更新、提交后通知、Saga 协调等。

限制:本地数据库事务无法让跨库或 HTTP 调用原子化;AFTER_COMMIT 不能恢复进程崩溃或重试失败投递;readOnly 不提供写保护或副本路由;测试需通过 Spring 代理并验证新事务中已提交数据,隔离与竞争测试应使用生产数据库引擎。