事务(Transaction)
事务:是数据库中的可以保证多个(至少2个)写操作(增、删、改)要么全部执行成功,要么全部执行失败的机制!
在基于Spring JDBC的项目中,使用@Transactional
注解,即可使得注解的方法是事务性的。
关于@Transactional
注解,可以添加在:
-
接口上
-
接口的抽象方法上
-
实现类上
-
实现类中重写的接口的方法上
提示:此注解可以配置一些参数,如果同时在接口/类、接口的抽象方法/类重写的方法上添加此注解并配置了不同的参数值,则以方法上的配置为准。
注意:Spring JDBC是基于接口的代理模式来实现事务管理的!所以,如果在实现类中的自定义方法上添加@Transactional
注解是错误的做法!仅当对应的方法是在业务接口中已经声明的,使用@Transactional
才是正确的!
关于事务处理过程中的几个概念:
-
开启事务:BEGIN
-
提交事务:COMMIT
-
回滚事务:ROLLBACK
在Spring JDBC的事务管理中,大致是:
开启事务
try {
执行你的业务方法
提交事务
} catch (RuntimeException e) {
回滚事务
}
可以看到,Spring JDBC的事务管理中,默认将根据RuntimeException
进行回滚,可以通过@Transactional
注解的rollbackFor
/ rollbackForClassName
这2个属性中的某1个进行修改,设置为对特定的异常进行回滚,还可以配置noRollbackFor
/ noRollbackForClassName
这2个属性,设置对特定的异常不回滚。
【小结】关于事务: