Spring中注解---事务注解 @Transactional中的属性与值
@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 | 本次事务可读可写 |