Spring中Transactional放在类级别和方法级别上有什么不同?
一般类上这么写
默认将类中的所有函数纳入事务管理.
@Transactional(readOnly=true) //配置事务 查询使用只读
public Demo{ //方法的写法 (增删改要写 ReadOnly=false 为可写)
@Transactiona
(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=false)public void saveUser(){ }
Propagation.REQUIRED :有事务就处于当前事务中,没事务就创建一个事务
isolation=Isolation.DEFAULT:事务数据库的默认隔离级别
readOnly=false:可写 针对 增删改操作
注意:方法的@Transactional会覆盖类上面声明的事务
1、PROPAGATION.REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
2、PROPAGATION.SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘
3、PROPAGATION.MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4、PROPAGATION.REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
5、PROPAGATION.NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、PROPAGATION.NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7、PROPAGATION.NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。