@Transactional

@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

事务的隔离级别

还有一些感觉不太会用到吧不多啰嗦了用到再查