@Transactional
修饰范围:类上或方法上
作用:给类中方法加入事务,当类上和方法上同时存在该注解时方法优先
注解属性:
propagation :控制事务传播属性
属性值:
(默认)Required : 需要事务,如果外层没有事务,则开启事务,若果外层有事务则融入当前事务。
Supports:支持事务,如果外层存在事务则融入当前事务,如果外层不存在事务也不会开新的事务
Mandatory:强制事务,必须存在事务,没有事务则报错
Requires_new:每次都会开启一个新的事务,如果外层存在事务,则外层事务挂起。自己新开启一个事务运行,运行完毕后,外层事务恢复
Not_Supportes:不支持事务,如果外层存在事务,外层事务挂起(暂停),自己已非事务的方式运行,运行完成后,恢复外层事务
Never:不能有事务,存在则报错
Nested:嵌套事务,数据库不支持
isolation : 控制事务隔离级别
属性值:
(默认)default:采用数据库自身的隔离级别
Read_Uncommitted:读未提交:一个事务读取到另一个事务没有提交的数据(脏读)
Read_Committed:读已提交:一个事务等另一个事务提交以后才能读数据,有效地避免了脏读现象。(Oracle默认使用)
Repeatable_read:可重复读:一个事务中A多次读取同一条数据(出现幻影读),即使事务B有修改操作,那么事务A读取的数据始终是一致的。(MySQL默认使用)
Serializable:序列化:事务的最高隔离级别,事务已串行的方式执行。解决幻影读现象
timeout : 设置超时时间,单位:毫秒
属性值:
-1:代表永不超时
任意值 :是一个大于0的值,代表当前事务执行过程中超时就会报错
rollbackFor : 设置遇见什么异常进行回滚,设置java.lang.RuntimeException以及子类异常
如:rollbackFor = NullPointerException.class
noRollbackFor : 设置遇见什么异常不进行回滚,设置java.lang.RuntimeException以及子类异常
如:noRollbackFor = IndexOutOfBoundsException.class
readOnly : 设置事务是否只读(Oracle不支持这个)
属性值:
true:本次事务只读,不能置信增删改
false:本次事务可读可写
标签:事务,Spring,Transactional,外层,报错,设置,注解,属性 From: https://www.cnblogs.com/Life-QX/p/16849720.html