Spring事务
spring-事务管理_spring事务-CSDN博客
Spring事务管理是指spring对数据库事务的管理,具有事务属性的是数据库如MySQL
使用实例:
1 @Override 2 @Transactional 3 public ResultData deleteTask(Task task) { 4 taskDao.delete(task); 5 storeTaskDao.deleteByTaskId(task.getId()); 6 return ResultData.newSuccessResultData(); 7 }
只需在方法上加@Transactional注解就可以进行事务控制
Spring提供了编程式事务和声明式事务两种支持,编程式事务允许用户在代码中精确定义事务的边界如自己需要手动执行commit或者rollback,而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦。
简单地说,编程式事务侵入到了业务代码里面,但是提供了更加详细的事务管理;而声明式事务由于基于AOP,所以既能起到事务管理的作用,又可以不影响业务代码的具体实现,也是运用最多的
@Transactional注解就是声明式的
一、@Transactional注解的原理
Spring事务底层是基于数据库事务和AOP机制的
1.在一个方法上加了@Transactional注解后,Spring会基于这个类生成一个代理对象,会将这个代理对象作为bean。
2.当在使用这个代理对象的方法时,如果这个方法上存在@Transactional注解,那么代理则利⽤事务管理器创建⼀个数据库连接。
3.修改数据库连接的autocommit属性为false,禁⽌此连接的⾃动提交,这是实现Spring事务⾮常重 要的⼀步
4.然后执⾏当前⽅法,⽅法中会执⾏sql
5.执⾏完当前⽅法后,如果没有出现异常就直接提交事务,如果出现了异常,并且这个异常是需要回滚的就会回滚事务,否则仍然提交事务
当然,针对哪些异常回滚事务是可以配置的,可以利用@Transactional注解中的rollbackFor属性进行配置,默认情况下会对RuntimeException和Error进行回滚。

浙公网安备 33010602011771号