一、在Spring中配置事务管理器
1、事务管理器bean的声明。
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> < span>bean> |
2、如果你需要以标注驱动的方式管理的话,必须在applicationContext.xml中申明。
<tx:annotation-driven transaction-manager="transactionManager"/> |
3、如果你用xml的方式使用事务管理器的话,如下有一个例子。
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="find*" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> < span>tx:attributes> < span>tx:advice> <aop:config> <aop:pointcut expression="execution(* *..dao.impl..*(..))" id="dao-pc"/> <aop:pointcut expression="execution(* *..service.impl..*(..))" id="service-pc"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="dao-pc"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="service-pc"/> < span>aop:config> <aop:aspectj-autoproxy /> |
二、在java代码中指定事务属性(使用标注)
下面例子是Dao实现类的一个方法,采用标注来指明事务。
@Transactional(readOnly=true) public List<User> findUser(UserDto dto) { User user = new User(); BeanUtils.copyProperties(dto, user); return factory.getCurrentSession() .createCriteria(User.class) .add(Example.create(user)) .list(); } |
三、Spring事务选项1.默认的 @Transactional设置如下
· 事务传播设置是 PROPAGATION_REQUIRED 使用现有事物,没有则启动新事物
· 事务隔离级别是 ISOLATION_DEFAULT
· 事务是 读/写 false
· 事务超时默认是依赖于事务系统的,或者事务超时没有被支持。
· 任何unchecked Exception将触发事务回滚,但是任何checked Exception将触发事务提交