springboot中事务注解 @Transactional()是如何使用的?
时间: 2024-09-09 15:12:10 浏览: 45
springboot中事务管理@Transactional的注意事项与使用场景
5星 · 资源好评率100%
`@Transactional` 是Spring框架提供的一个用于声明式事务管理的注解。它允许开发者通过简单地在方法上或类上添加该注解来声明事务边界,而不需要编写事务管理的代码。使用`@Transactional`注解,Spring容器会根据配置创建一个代理,这个代理会拦截带有`@Transactional`注解的方法调用,并在运行时进行事务管理。
`@Transactional`注解的基本使用方法如下:
1. **在方法上使用:** 当你在方法上使用`@Transactional`注解时,Spring会在该方法开始执行时开启一个事务,并在方法执行完毕后,根据方法的执行结果决定是提交事务还是回滚事务。
2. **在类上使用:** 当你在类上使用`@Transactional`注解时,Spring会对类中的所有公共方法应用事务管理。如果类中的某些方法不应该使用事务或者需要不同的事务管理策略,可以在这些方法上单独使用`@Transactional`注解并指定不同的属性。
`@Transactional`注解的常用属性包括:
- `value` 或 `transactionManager`:指定事务管理器的名称。
- `propagation`:指定事务的传播行为,例如`Propagation.REQUIRED`、`Propagation.REQUIRES_NEW`等。
- `isolation`:指定事务的隔离级别,例如`Isolation.DEFAULT`、`Isolation.READ_COMMITTED`等。
- `timeout`:指定事务的超时时间。
- `readonly`:指定事务是否只读,默认为false。
使用示例:
```java
@Service
public class MyService {
@Transactional
public void doSomething() {
// 业务逻辑
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void doSomethingElse() {
// 另一个业务逻辑,需要新的事务
}
}
```
在上述代码中,`doSomething`方法和`doSomethingElse`方法都被`@Transactional`注解修饰,意味着它们的操作会发生在事务上下文中。其中`doSomethingElse`方法因为指定了`propagation = Propagation.REQUIRES_NEW`,所以在调用时会开启一个新的事务,即使当前已经有事务存在。
阅读全文