transactionAttributes 属性:

PROPAGATION

 


事务传播行为类型



说明



PROPAGATION_REQUIRED



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



PROPAGATION_SUPPORTS



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



PROPAGATION_MANDATORY



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



PROPAGATION_REQUIRES_NEW



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



PROPAGATION_NOT_SUPPORTED



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



PROPAGATION_NEVER



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



PROPAGATION_NESTED



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


 

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




​查看文本​​​​打印​​​​?​


  1. <prop=></prop>  


 

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

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

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

 

readonly :

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


注解形式:




1 <context:annotation-config />  
2 <context:component-scan base-package="com.bluesky" />
3
4 <tx:annotation-driven transaction-manager="transactionManager"/>
5
6 <bean id="sessionFactory"
7 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
8 <property name="configLocation" value="classpath:hibernate.cfg.xml" />
9 <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
10 </bean>
11
12 <!-- 定义事务管理器(声明式的事务) -->
13 <bean id="transactionManager"
14 class="org.springframework.orm.hibernate3.HibernateTransactionManager">
15 <property name="sessionFactory" ref="sessionFactory" />
16 </bean>
17
18 </beans>


 



1 package com.bluesky.spring.dao;  
2
3 import java.util.List;
4
5 import org.hibernate.SessionFactory;
6 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
8 import org.springframework.stereotype.Component;
9
10 import com.bluesky.spring.domain.User;
11
12 @Transactional(value = "txManager",propagation=Propagation.REQUIRED,rollbackFor=Exception.class,readOnly=true)
13 @Component("userDao")
14 public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
15
16 public List<User> listUsers() {
17 return this.getSession().createQuery("from User").list();
18 }
19
20
21 }


 

 

aop形式:

 



1 <context:annotation-config />  
2 <context:component-scan base-package="com.bluesky" />
3
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 <!-- 定义事务管理器(声明式的事务) -->
11 <bean id="transactionManager"
12 class="org.springframework.orm.hibernate3.HibernateTransactionManager">
13 <property name="sessionFactory" ref="sessionFactory" />
14 </bean>
15
16 <tx:advice id="txAdvice" transaction-manager="transactionManager">
17 <tx:attributes>
18 <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />
19 </tx:attributes>
20 </tx:advice>
21
22 <aop:config>
23 <aop:pointcut id="interceptorPointCuts"
24 expression="execution(* com.wonders.asset.service..*.*(..))" />
25 <aop:advisor advice-ref="txAdvice"
26 pointcut-ref="interceptorPointCuts" />
27 </aop:config>
28 </beans>


 

 

 

共享基类:

 



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 <!-- 定义事务管理器(声明式的事务) -->
8 <bean id="transactionManager"
9 class="org.springframework.orm.hibernate3.HibernateTransactionManager">
10 <property name="sessionFactory" ref="sessionFactory" />
11 </bean>
12
13 <bean id="transactionBase"
14 class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
15 lazy-init="true" abstract="true">
16 <!-- 配置事务管理器 -->
17 <property name="transactionManager" ref="transactionManager" />
18 <!-- 配置事务属性 -->
19 <property name="transactionAttributes">
20 <props>
21 <prop key="*">PROPAGATION_REQUIRED</prop>
22 </props>
23 </property>
24 </bean>
25
26 <!-- 配置DAO -->
27 <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
28 <property name="sessionFactory" ref="sessionFactory" />
29 </bean>
30
31 <bean id="userDao" parent="transactionBase" >
32 <property name="target" ref="userDaoTarget" />
33 </bean>
34 </beans>