@Transactional常用
时间: 2025-01-15 09:32:09 浏览: 34
### @Transactional 注解的常见用法
在Spring框架中,`@Transactional`注解用于声明式事务管理。此注解能够应用到接口定义、接口中的方法定义、类定义以及类中的公共方法定义上[^1]。
当把`@Transactional`放置于服务层的方法之上时,在访问数据库的过程中如果发生异常,默认情况下会回滚整个事务。这确保了数据的一致性和完整性[^2]。
#### 应用于单个方法
最普遍的方式是在需要控制事务的服务层方法上面加上这个注解:
```java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void createUser(User user) {
// 执行一些业务逻辑...
userRepository.save(user);
}
}
```
上述例子展示了在一个简单的创建用户的场景下如何使用`@Transactional`注解来包裹可能涉及多个持久化操作的方法调用[^3]。
#### 设置传播行为
除了基本的应用外,还可以配置更多选项比如设置事务的传播行为(Propagation Behavior),它决定了当前方法是否有自己的新事物还是参与已有的事务之中:
```java
@Transactional(propagation = Propagation.REQUIRED)
public void requiredTransactionMethod() { ... }
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void requiresNewTransactionMethod() { ... }
```
这里分别设置了两种不同的传播级别——`REQUIRED`表示如果有现有事务则加入其中;如果没有,则启动新的事务。而`REQUIRES_NEW`总是开启一个新的独立事务。
#### 处理只读事务
对于那些只需要查询而不修改任何状态的操作来说,可以通过指定readOnly参数为true来优化性能并减少资源消耗:
```java
@Transactional(readOnly = true)
public List<User> getAllUsers() {
return userRepository.findAll();
}
```
这样做可以让底层JDBC驱动程序知道这是一个只读型的操作从而做出相应调整。
阅读全文
相关推荐


















