@Transactional(rollbackFor = Exception.class)的正确用法,详细一些,最好有详细的案例
时间: 2023-07-28 21:31:56 浏览: 84
Spring中@Transactional用法详细介绍
5星 · 资源好评率100%
@Transactional注解是Spring框架中用来声明事务的注解,它可以应用在类或方法上。当@Transactional注解应用在方法上时,该方法将被包含在一个事务中,如果方法执行过程中抛出异常,事务将会被回滚。
正确使用@Transactional注解的步骤如下:
1. 在Spring配置文件中启用注解驱动事务管理器:
```
<tx:annotation-driven transaction-manager="transactionManager"/>
```
2. 在需要使用事务管理的类或方法上添加@Transactional注解:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Transactional(rollbackFor = Exception.class)
public void addUser(User user) {
userDao.addUser(user);
}
}
```
在上面的示例中,添加用户的方法被标记为@Transactional,并设置了rollbackFor属性。该属性指定在哪些异常情况下需要回滚事务。在这个例子中,回滚所有异常。
3. 测试事务回滚:
```
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class UserServiceImplTest {
@Autowired
private UserService userService;
@Test
public void testAddUser() {
User user = new User();
user.setName("test");
user.setAge(20);
userService.addUser(user);
// 手动抛出异常
throw new RuntimeException();
}
}
```
在上面的测试方法中,添加用户后手动抛出了RuntimeException异常,因此事务会回滚,用户不会被添加到数据库中。
总之,在使用@Transactional注解时,需要确保以下几点:
1. 注解应用在public方法上,不应用在private或protected方法上。
2. 在Spring配置文件中启用注解驱动事务管理器。
3. 设置rollbackFor属性,指定需要回滚的异常类型。
4. 测试事务回滚是否生效。
阅读全文