通过@Transactional注解方式,可以将事务放到响应的public方法中,实现事务管理。
一、属性
@Transactional的所有可选属性如下所示:
1.propagation
用于设置事务传播属性。该属性类型为Propagation枚举,默认值为Propagation.REQUIRED
2.isolation
用于设置事务的隔离级别。该属性类型为isolation枚举,默认值为Isolation.DEFAULT
3.readOnly
用于设置该方法对数据库的操作是否是只读的。该属性为boolean,默认值为false
4.timeout
用于设置本操作与数据库连接的超时时限。单位为秒,类型为int,默认值为-1,即没有时限。
5.rollbackFor
指定需要回滚的异常类。类型为Class[],默认值为空数组。当然,若只有一个异常类时,可以不适用数组。
6.rollbackForClassName
指定需要回滚的异常类类名。类型为String[],默认值为空数组。当然,若只有一个异常类时,可以不使用数组。
7.noRollbackFor
指定不需要回滚的异常类。类型为Class[],默认为空数组。当然,若只有一个异常类时,可以不适用数组。
二、使用步骤
1.声明事务管理器对象
<bean id="transactionManager" class="DataSourceTransactionManager">
<!--连接数据库,指定数据源-->
<property name="dataSource" ref="myDataSource"/>
</bean>
2.开启事务注解驱动,告诉spring框架,我要使用注解的方式管理事务
<!--transaction-manager:事务管理器对象的id-->
<tx:annotation-driven transaction-manager="transactionManager" />
3.使用事务
@Transactional
public void buy()
{
.......
}
原理等价于
@Around("业务功能的业务方法名称")
Object myAround(){
try{
buy();
spring的事务管理.commit();
}catch(Exception e)
{
spring的事务管理.rollback();
}
}