@transactional默认级别
时间: 2023-04-25 19:05:32 浏览: 82
@Transactional默认级别是Propagation.REQUIRED,即如果当前没有事务,就新建一个事务;如果已经存在一个事务中,加入到这个事务中。同时,事务的隔离级别默认为Isolation.DEFAULT,事务超时时间默认为-1(即不超时),回滚异常默认为RuntimeException及其子类。
相关问题
@transactional默认隔离级别
在 Spring 中,使用 @Transactional 注解时,默认的隔离级别是 Isolation.DEFAULT,它会使用底层的数据库默认隔离级别。一般情况下,MySQL 的默认隔离级别为 Repeatable Read,而 Oracle 的默认隔离级别为 Read Committed。如果需要指定具体的隔离级别,可以在 @Transactional 注解中设置 isolation 属性,如 @Transactional(isolation = Isolation.READ_COMMITTED)。常用的隔离级别包括:
- DEFAULT:使用底层数据库的默认隔离级别
- READ_UNCOMMITTED:允许读取未提交的数据变更,可能会导致脏读、不可重复读和幻读等问题
- READ_COMMITTED:只能读取已提交的数据,能避免脏读问题,但可能会出现不可重复读和幻读问题
- REPEATABLE_READ:确保同一个事务中多次读取的数据是一致的,避免脏读和不可重复读问题,但可能会出现幻读问题
- SERIALIZABLE:确保同一个事务中多次读取和写入的数据是一致的,避免以上所有问题,但可能会导致性能下降。
@transactional默认参数
@Transaction注解是Spring框架中用于管理事务的注解,其默认参数如下:
- propagation:事务的传播行为,默认值为REQUIRED。
- isolation:事务的隔离级别,默认值为DEFAULT。
- readOnly:是否只读,默认值为false。
- timeout:事务超时时间,默认值为-1,表示使用数据库默认超时时间。
- rollbackFor:指定哪些异常需要回滚事务,默认为空。
- noRollbackFor:指定哪些异常不需要回滚事务,默认为空。
例如,以下代码展示了如何使用@Transaction注解:
```java
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = false, timeout = -1, rollbackFor = Exception.class, noRollbackFor = RuntimeException.class)
public void doSomething() {
// 业务逻辑代码
}
```