@Transactional spring 配置事务
@Transactional
注解。在多数情形下,方法的事务设置将优先于类的事务设置执行。
2. 在Spring配置文件加
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<aop:aspectj-autoproxy proxy-target-class="true"/>
@Transactional
设置如下:
-
事务传播设置是
PROPAGATION_REQUIRED 使用现有事物,没有则启动新事物
-
事务隔离级别是
ISOLATION_DEFAULT
-
事务是 读/写 false
-
事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
-
任何
RuntimeException
将触发事务回滚,但是任何 checkedException
将不触发事务回滚
这些默认的设置当然也是可以被改变的。 @Transactional
注解的各种属性设置总结如下:
@Transactional
注解的属性
属性 | 类型 | 描述 |
---|---|---|
传播性 | 枚举型:Propagation | 可选的传播性设置 |
隔离性 | 枚举型:Isolation | 可选的隔离性级别(默认值:ISOLATION_DEFAULT ) |
只读性 | 布尔型 | 读写型事务 vs. 只读型事务 |
超时 | int型(以秒为单位) | 事务超时 |
回滚异常类(rollbackFor) | 一组 Class 类的实例,必须是Throwable 的子类 | 一组异常类,遇到时 必须 进行回滚。默认情况下checked exceptions不进行回滚,仅unchecked exceptions(即RuntimeException 的子类)才进行事务回滚。 |
回滚异常类名(rollbackForClassname) | 一组 Class 类的名字,必须是Throwable 的子类 | 一组异常类名,遇到时 必须 进行回滚 |
不回滚异常类(noRollbackFor) | 一组 Class 类的实例,必须是Throwable 的子类 | 一组异常类,遇到时 必须不 回滚。 |
不回滚异常类名(noRollbackForClassname) | 一组 Class 类的名字,必须是Throwable 的子类 | 一组异常类,遇到时 必须不 回滚 |
@Transactional
public class ManagerService implements IManagerService {
private IAdminsDao adminsDao;
private IUsersDao usersDao;
public void setAdminsDao(IAdminsDao adminsDao) {
this.adminsDao = adminsDao;
}
public void setUsersDao(IUsersDao usersDao) {
this.usersDao = usersDao;
}
@Transactional
public void validateTbManager(Admins admins, Users users) {
adminsDao.save(admins);
usersDao.save(users);
}
}
注解@Transactional cglib与java动态代理最大区别是代理目标对象不用实现接口,那么注解要是写到接口方法上,要是使用cglib代理,这是注解事物就失效了,为了保持兼容注解最好都写到实现类方法上