@Transactional和@Transactional(rollack=Exception.class)
时间: 2023-11-15 13:00:41 浏览: 143
@Transactional是一个注解,用于标记一个方法或类需要在一个事务中运行。如果在方法或类中抛出了异常,那么事务将会回滚,以确保数据的一致性。如果不指定rollbackFor属性,那么事务只会在遇到RuntimeException的时候才会回滚。而如果指定了rollbackFor=Exception.class,那么事务将会在遇到非运行时异常时也回滚。
举个例子,如果一个类加上了@Transactional(rollbackFor=Exception.class)注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
另外,引用中提到的Example是MyBatis逆向工程中生成的实例及实例对应的example,用于添加条件,相当于where后面的部分。
相关问题
@Transactional(rollbackFor = Exception.class)与@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)的区别
@Transactional注解用于声明事务,在Spring中常用来保证方法的执行在一个事务内部,以确保数据的一致性和完整性。其中,rollbackFor参数指定哪些异常需要回滚事务,Propagation.REQUIRED指定了方法的事务传播行为。
区别如下:
- @Transactional(rollbackFor = Exception.class):这个注解只指定了回滚的异常类型,而没有指定传播行为,默认传播行为是Propagation.REQUIRED。
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class):这个注解指定了方法的事务传播行为和回滚的异常类型。
简单来说,前者只指定了回滚异常类型,而后者不仅指定了回滚异常类型,还明确指定了事务的传播行为。
@Transactional(rollbackFor = Exception.class) @GlobalTransactional(rollbackFor = Exception.class) 能同时使用吗
在Spring框架中,`@Transactional`和`@GlobalTransactional`注解可以同时使用,但需要注意它们的作用范围和优先级。
1. **`@Transactional`注解**:用于声明方法的事务管理。它通常用于单个服务方法的事务控制,确保方法内的数据库操作要么全部成功,要么全部回滚。
2. **`@GlobalTransactional`注解**:通常用于分布式事务管理,例如使用Seata框架时。它可以跨越多个服务,确保整个分布式事务的一致性。
同时使用这两个注解时,`@GlobalTransactional`的优先级通常更高,因为它管理的是全局事务,而`@Transactional`管理的是局部事务。具体行为如下:
- 当方法上同时存在这两个注解时,`@GlobalTransactional`会首先生效,确保全局事务的一致性。
- 在全局事务的范围内,`@Transactional`会管理局部事务,确保每个服务内部的事务一致性。
示例代码:
```java
@Service
public class MyService {
@Autowired
private AnotherService anotherService;
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class)
public void myTransactionalMethod() {
// 数据库操作
anotherService.anotherMethod();
// 更多的数据库操作
}
}
@Service
public class AnotherService {
@Transactional(rollbackFor = Exception.class)
public void anotherMethod() {
// 另一个数据库操作
}
}
```
在这个示例中,`myTransactionalMethod`方法同时使用了`@Transactional`和`@GlobalTransactional`注解。`@GlobalTransactional`确保整个方法在一个全局事务中执行,而`@Transactional`确保`anotherMethod`在一个局部事务中执行。
阅读全文
相关推荐
















