@Transactional
标注在方法上可以实现一个事务
Spring事务管理有编程式和声明式两种,前者通过编码方式,后者基于AOP,代码逻辑不受污染,使用的也较多。声明式事务有两种实现方式,一种是在xml里做相关声明,另一种就是用@Transactional。
但使用时,若在同一个类中,若其中的方法1调用了方法2,且两者都被标注了@Transactional则只被看成一个事务,方法2不会被Spring的事务拦截器拦截,解决方法可以分两个类写或者用AspectJ取代AOP,但我没有做验证。
另外该注解可以有属性值
value/transactionManager
这两个是一个意思,指定事务的名字
propagation
可选的值有:
Propagation.REQUIRED
如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新的事务。
Propagation.SUPPORTS
如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式继续运行。
Propagation.MANDATORY
如果当前存在事务,则加入该事务;如果当前不存在事务,则抛出异常。
Propagation.REQUIRES_NEW
重新创建一个新的事务,如果当前存在事务,暂停当前的事务。
Propagation.NOT_SUPPORTED
以非事务的方式运行,如果当前存在事务,暂停当前的事务。
Propagation.NEVER
以非事务的方式运行,如果当前存在事务,则抛出异常。
Propagation.NESTED
和 Propagation.REQUIRED 效果一样。
isolation
事务的隔离级别
还有一些感觉不太会用到吧不多啰嗦了用到再查