关于spring事务管理的那些事



事务的特性:
1.原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
2.一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
3.隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
4.持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。

spring事务的核心接口:

从图中可以看出主要接口为:
TransactionDefinition:规范事务的特定表现形式。
TransactionStatus:事务运转的状态形式。
PlatformTransactionManager:根据给定的规则获取事务现有状态的具体表现,进行具体操作

spring事务管理器:
从上面图可以看出spring并不会直接管理事务而是提供事务管理器这个接口,再由各个平台自己去实现自己的事务管理这个接口就是org.springframework.transaction.PlatformTransactionManager,接口内容:

PublicinterfacePlatformTransactionManager()...{
// 由TransactionDefinition得到TransactionStatus对象
TransactionStatus getTransaction(TransactionDefinition definition)throwsTransactionException;
// 提交
Void commit(TransactionStatus status)throwsTransactionException;
// 回滚
Void rollback(TransactionStatus status)throwsTransactionException;
}

mybatis事务管理器:
使用@Transactional注解的方式:
@Transactional的几个常用属性:rollbackFor:导致事务回滚的异常类数组;timeout:超时设置;rollbackForClassName:导致事务回滚的异常类名字数组。

@Transactional
publicint txUpdateUsersWhenException() {
        User user = new User(9, "Before exception");
        int affectedCount = mapper.updateUser(user); // 有异常而回滚
        User user2 = new User(10, "After exception");
        int i = 1 / 0; // 抛出运行时异常,事务回滚
        int affectedCount2 = mapper.updateUser(user2); // 未执行
        if (affectedCount == 1 && affectedCount2 == 1) {
               return1;
                }
       return0;
          }
}

猜你喜欢

转载自blog.csdn.net/weixin_41648325/article/details/80221525