springboot中的@transactional
时间: 2023-08-08 14:12:14 浏览: 97
@Transactional 是 Spring Framework 中的一个注解,用于管理事务。事务是一系列数据库操作的逻辑单元,要么全部成功执行,要么全部回滚。
在 Spring Boot 中,使用 @Transactional 注解可以将一个方法或者类标记为事务处理的方法。当方法被调用时,Spring 会自动为其创建一个事务,并在方法执行结束后根据方法执行结果决定是提交事务还是回滚事务。
@Transactional 注解可以应用于类级别或者方法级别。当应用于类级别时,表示该类中的所有方法都将被包装在一个事务中。当应用于方法级别时,表示该方法将被包装在一个独立的事务中。
可以通过在 @Transactional 注解中设置不同的属性来控制事务的属性,如传播行为、隔离级别、只读等。
下面是一个示例:
```java
@Service
@Transactional
public class UserService {
@Autowired
private UserRepository userRepository;
public void createUser(User user) {
userRepository.save(user);
}
public void deleteUser(Long userId) {
userRepository.deleteById(userId);
}
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
public User getUserById(Long userId) {
return userRepository.findById(userId).orElse(null);
}
}
```
在上面的示例中,UserService 类被标记为 @Transactional,表示该类中的所有方法都将被包装在一个事务中。createUser 和 deleteUser 方法都会在同一个事务中执行,默认的传播行为是 REQUIRED。getUserById 方法使用了自定义的传播行为和隔离级别。
需要注意的是,@Transactional 注解只对 public 修饰的方法有效,对于 private、protected 或者 package-private 修饰的方法不会产生效果。另外,事务只在被 Spring 托管的 Bean 中才会生效,因此直接在 main 方法中调用的方法不会开启事务。
阅读全文