spring的@Transactional怎么用
时间: 2023-07-12 12:49:58 浏览: 167
在 Spring 中,`@Transactional` 注解可以用来声明事务性方法,以保证方法执行的原子性、一致性和隔离性。
使用 `@Transactional` 注解需要遵循以下步骤:
1. 在 Spring 配置文件中开启事务管理器:
```xml
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
```
2. 在需要声明事务性的方法上加上 `@Transactional` 注解:
```java
@Transactional
public void updateUserInfo(UserInfo userInfo) {
userDao.update(userInfo);
}
```
这里的 `updateUserInfo` 方法会被声明为一个事务性方法,当该方法被调用时,Spring 会自动开启一个事务,并在方法执行结束后提交事务或者回滚事务(如果方法抛出了异常)。
3. 可以在 `@Transactional` 注解中指定一些属性来控制事务的行为,例如:
- `propagation` 属性:用于指定事务的传播行为,例如 `REQUIRED` 表示如果当前没有事务,则开启一个新的事务;如果当前已经有事务,则加入当前事务;
- `isolation` 属性:用于指定事务的隔离级别,例如 `READ_COMMITTED` 表示读已提交;
- `timeout` 属性:用于指定事务的超时时间,单位是秒;
- `readOnly` 属性:用于指定事务是否只读,如果为 `true`,则事务只能读取数据,不能修改数据。
需要注意的是,`@Transactional` 注解只对公共方法有效,对于私有方法、静态方法、final 方法等是不起作用的。同时,如果在方法内部调用了另外一个带有 `@Transactional` 注解的方法,那么事务仍然是在外层方法中开启的。因此,在使用 `@Transactional` 注解时,需要仔细考虑事务的传播行为和隔离级别,以保证事务的正确性和性能。
阅读全文