Spring 声明式事务通过配置或注解把事务边界应用到方法调用,实际效果取决于事务管理器、代理及调用路径。
代理边界
在默认代理模式下,外部通过代理进入的方法调用才能被相应拦截。同一对象内部直接调用带注解的方法,通常不会触发新的代理事务行为,因此仅看到 @Transactional 不能证明事务生效。
回滚与资源范围
默认回滚规则和 checked exception 的处理需要明确配置;异常被吞掉后也可能无法按预期回滚。还应检查传播方式、是否选择了正确事务管理器,以及数据库操作是否参与同一资源事务。
数据库事务不会自动覆盖远程 HTTP 或任意消息副作用。只读标记也不能简单视为所有数据库都会执行的禁止写入权限。