@Transactional属性的用法
时间: 2023-10-13 07:19:32 浏览: 37
`@Transactional` 是一个注解,用于在 Spring 应用程序中声明事务的行为。它可以应用于类或方法级别,并指示将被注解的方法或类的所有公共方法都包装在一个事务中。
当 `@Transactional` 注解应用在类级别时,它将应用于该类的所有公共方法。当应用在方法级别时,它将仅应用于被注解的方法。
`@Transactional` 提供以下功能:
1. 事务管理:它确保被注解的方法在执行时运行在一个事务内。如果方法成功完成,事务将被提交。如果方法出现异常,事务将被回滚。
2. 隔离级别:通过 `isolation` 属性,可以指定事务的隔离级别。常见的隔离级别有 READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ 和 SERIALIZABLE。
3. 传播行为:通过 `propagation` 属性,可以指定事务的传播行为。常见的传播行为有 REQUIRED、REQUIRES_NEW、SUPPORTS、NOT_SUPPORTED 和 NEVER。
4. 异常处理:可以通过 `rollbackFor` 或 `noRollbackFor` 属性指定哪些异常触发事务回滚或不回滚。
下面是一个示例:
```java
@Service
@Transactional
public class UserService {
@Autowired
private UserRepository userRepository;
public void saveUser(User user) {
userRepository.save(user);
}
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
```
在上面的示例中,`@Transactional` 注解被应用在类级别,表示 `UserService` 中的所有公共方法都将运行在一个事务内。`deleteUser` 方法使用了不同的传播行为 `REQUIRES_NEW`,表示每次调用该方法都会创建一个新的事务。
希望这个回答对你有帮助!如有其他问题,请继续提问。