transactionAttributes 属性:

PROPAGATION


事务传播行为类型



说明



PROPAGATION_REQUIRED



如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。



PROPAGATION_SUPPORTS



支持当前事务,如果当前没有事务,就以非事务方式执行。



PROPAGATION_MANDATORY



使用当前的事务,如果当前没有事务,就抛出异常。



PROPAGATION_REQUIRES_NEW



新建事务,如果当前存在事务,把当前事务挂起。



PROPAGATION_NOT_SUPPORTED



以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。



PROPAGATION_NEVER



以非事务方式执行,如果当前存在事务,则抛出异常。



PROPAGATION_NESTED



如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。



Exception:(注解用 rollback-for) 定义当遇到Exception异常 时 回滚。



<prop key="save*">PROPAGATION_REQUIRED,
-ApplicationException,+BusinessException</prop>

- 表示抛出该异常时需要回滚

+表示即使抛出该异常事务同样要提交

-ApplicationException :表示抛出ApplicationException 时,事务需要回滚。但不是说只抛出ApplicationException 异常时,事务才回滚,如果程序抛出RuntimeException和Error时,事务一样会回滚,即使这里没有配置。因为Spring中默认对所有的RuntimeException和Error都会回滚事务



readonly :

readonly是设置操作权限为只读,一般用于查询的方法,优化作用.

注解形式:


[html] 

  1. <context:annotation-config />
  2. <context:component-scan base-package="com.bluesky" />

  3. <tx:annotation-driven transaction-manager="transactionManager"/>

  4. <bean id="sessionFactory"
  5. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  6. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  7. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  8. </bean>

  9. <!-- 定义事务管理器(声明式的事务) -->
  10. <bean id="transactionManager"
  11. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  12. <property name="sessionFactory" ref="sessionFactory" />
  13. </bean>

  14. </beans>




[java] 

package com.bluesky.spring.dao;


  1. import java.util.List;

  2. import org.hibernate.SessionFactory;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  5. import org.springframework.stereotype.Component;

  6. import com.bluesky.spring.domain.User;

  7. @Transactional(value = "txManager",propagation=Propagation.REQUIRED,rollbackFor=Exception.class,readOnly=true)
  8. @Component("userDao")
  9. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

  10. public List<User> listUsers() {
  11. return this.getSession().createQuery("from User").list();
  12. }


  13. }




aop形式:


[html] 

  1. <context:annotation-config />
  2. <context:component-scan base-package="com.bluesky" />

  3. <bean id="sessionFactory"
  4. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  5. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  6. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  7. </bean>

  8. <!-- 定义事务管理器(声明式的事务) -->
  9. <bean id="transactionManager"
  10. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  11. <property name="sessionFactory" ref="sessionFactory" />
  12. </bean>

  13. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  14. <tx:attributes>
  15. <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />
  16. </tx:attributes>
  17. </tx:advice>

  18. <aop:config>
  19. <aop:pointcut id="interceptorPointCuts"
  20. expression="execution(* com.wonders.asset.service..*.*(..))" />
  21. <aop:advisor advice-ref="txAdvice"
  22. pointcut-ref="interceptorPointCuts" />
  23. </aop:config>
  24. </beans>




共享基类:


[html] 

  1. <bean id="sessionFactory"
  2. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  4. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  5. </bean>

  6. <!-- 定义事务管理器(声明式的事务) -->
  7. <bean id="transactionManager"
  8. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  9. <property name="sessionFactory" ref="sessionFactory" />
  10. </bean>

  11. <bean id="transactionBase"
  12. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
  13. lazy-init="true" abstract="true">
  14. <!-- 配置事务管理器 -->
  15. <property name="transactionManager" ref="transactionManager" />
  16. <!-- 配置事务属性 -->
  17. <property name="transactionAttributes">
  18. <props>
  19. <prop key="*">PROPAGATION_REQUIRED</prop>
  20. </props>
  21. </property>
  22. </bean>

  23. <!-- 配置DAO -->
  24. <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
  25. <property name="sessionFactory" ref="sessionFactory" />
  26. </bean>

  27. <bean id="userDao" parent="transactionBase" >
  28. <property name="target" ref="userDaoTarget" />
  29. </bean>
  30. </beans>






版权声明:本文为博主原创文章,未经博主允许不得转载。