@Transactional属性详解
时间: 2023-10-21 08:37:14 浏览: 39
@Transactional是Spring框架中的一个注解,用于控制事务的提交和回滚。使用@Transactional注解可以使方法具有原子性,即要么全部执行成功,要么全部执行失败。
@Transactional注解可以应用在类级别和方法级别上,其属性如下:
1. propagation:事务的传播行为,默认值为REQUIRED。常用的取值有:
- REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
- REQUIRES_NEW:创建一个新的事务,并且暂停当前事务(如果存在)。
- SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
- NOT_SUPPORTED:以非事务的方式运行,如果当前存在事务,则将事务挂起。
- MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
- NEVER:以非事务的方式运行,如果当前存在事务,则抛出异常。
- NESTED:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。
2. isolation:事务的隔离级别,默认值为DEFAULT。常用的取值有:
- DEFAULT:使用数据库默认的隔离级别。
- READ_UNCOMMITTED:允许脏读,未提交的数据可以被其他事务读取。
- READ_COMMITTED:不允许脏读,读取的数据是已经提交的数据。
- REPEATABLE_READ:保证可重复读,即在一个事务中多次读取同一数据时,其值不会发生变化。
- SERIALIZABLE:最高的隔离级别,保证所有事务按照顺序依次执行。
3. timeout:事务的超时时间,默认值为-1,表示不超时。单位为秒。
4. readOnly:设置事务为只读模式,默认值为false。
5. rollbackFor:指定需要回滚的异常类型,多个异常类型可以用逗号分隔。
6. noRollbackFor:指定不需要回滚的异常类型,多个异常类型可以用逗号分隔。
7. value:可以用来覆盖类级别的@Transactional注解中的属性。例如,在类级别的@Transactional注解中指定了propagation=REQUIRED,而在方法级别的@Transactional注解中指定了propagation=REQUIRES_NEW,则方法级别的注解会覆盖类级别的注解。