@transactional注解属性解析
时间: 2023-10-06 19:04:59 浏览: 69
`@Transactional` 是 Spring Framework 中的一个注解,用于声明事务性方法或类。该注解可以用在方法级别或类级别,标记方法或类需要在事务范围内执行。当方法或类被调用时,会自动创建一个事务,并且将该方法或类的所有数据库操作都包含在这个事务中。
该注解有以下属性:
- `value`:指定事务管理器的名称。如果只有一个事务管理器,则可以省略。
- `propagation`:指定事务的传播行为。默认值为 `Propagation.REQUIRED`。可选值有:
- `Propagation.REQUIRED`:如果当前存在事务,则加入该事务;否则创建一个新事务。
- `Propagation.SUPPORTS`:如果当前存在事务,则加入该事务;否则以非事务性执行。
- `Propagation.MANDATORY`:必须在事务中执行,如果当前不存在事务,则抛出异常。
- `Propagation.REQUIRES_NEW`:创建一个新的事务,并在该事务中执行代码。如果当前存在事务,则挂起该事务。
- `Propagation.NOT_SUPPORTED`:以非事务性执行代码。如果当前存在事务,则挂起该事务。
- `Propagation.NEVER`:以非事务性执行代码。如果当前存在事务,则抛出异常。
- `Propagation.NESTED`:如果当前存在事务,则在嵌套事务中执行代码;否则创建一个新事务。
- `isolation`:指定事务的隔离级别。默认值为 `Isolation.DEFAULT`。可选值有:
- `Isolation.DEFAULT`:使用数据库默认隔离级别。
- `Isolation.READ_UNCOMMITTED`:最低的隔离级别,允许读取未提交的数据。
- `Isolation.READ_COMMITTED`:允许读取已提交的数据,但不允许读取未提交的数据。
- `Isolation.REPEATABLE_READ`:保证在同一个事务中多次读取同一数据时,结果始终相同。
- `Isolation.SERIALIZABLE`:最高的隔离级别,确保事务之间不会相互影响。
- `timeout`:指定事务的超时时间(秒)。默认值为 `-1`,表示不设置超时时间。
- `readOnly`:指定事务是否为只读事务。默认值为 `false`。如果设置为 `true`,则事务只能读取数据,不能修改数据。
除了上述属性外,`@Transactional` 还提供了一些其他的属性,如 `rollbackFor`、`noRollbackFor`、`rollbackForClassName`、`noRollbackForClassName` 等。这些属性用于控制事务的回滚行为,可以根据需要进行设置。
阅读全文