Spring事务的使用

背景:什么时候使用事务?答:有一组操作需要同时完成或者有一个操作失败则全部回滚。

Spring提供事务的实现吗?不提供,事务一般都是使用mysql(innodb引擎),oracel等数据库本身的属性,即大家常说的事务隔离级别就是数据库本身的属性。那spring提供的是什么?抽象接口的定义,各个厂商针对不同的数据库提供不同的实现,比如最常用的就是JDBC中的DataSourceTransactionManager。那Spring还提供了什么?spring提供了事务的传播特性即多个请求同时到达一个事务该怎么处理,大家可以自行百度一下。


Spring事务在开发的时候有三种方式进行声明

(1)在代码中使用TransactonTemplate类,进行execute()方法调用

(2)使用注解的方式@Transaction注解

(3)使用aop方式进行配置

这三种方式本质都是使用数据库本身的特性DataSourceTransactionManager进行事务的。


说到事务大家需要注意一下数据库的锁需要是事务中使用才有效。

select name from stu where uid="" for update

这条语句是数据库加锁的语句,注意where条件需要有索引,如果不使用索引可能对全表加锁,导致性能很差。

为什么需要在查询语句加锁呢?主要是为了做幂等校验,防止执行二次。


一般一个状态的更新,需要先查询,然后在更新。因此将这二步放到一个事务中,且使用锁来保证并发,sql中的锁是悲观锁,因此性能会有一些差,如果性能要求很高可以考虑使用乐观锁。


你可能感兴趣的:(java,Spring)