<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性 -->
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
请问这个<prop key="*">PROPAGATION_REQUIRED</prop> 就是指所有方法都开启事务?,不管什么名称开头的方法都开启事务?

解决方案 »

  1.   

    这种方式是过时的,现在主流是
    //4, tx标签拦截器-------------------方法别的-------------------
    //<aop:pointcut/><tx:advice/><aop:advisor/>元素都可以是多个,就可以实现方法级别了
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="*" propagation="REQUIRED" />
    </tx:attributes>
    </tx:advice>
    <aop:config>
    <aop:pointcut id="interceptorPointCuts" expression="execution(* com.bluesky.spring.dao.*.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" /> 
    </aop:config> 

    //5,全注解-------------------方法别的-------------------spring官方推荐-特别是大项目中
    <context:annotation-config />
    <context:component-scan base-package="com.bluesky" />
    <tx:annotation-driven transaction-manager="transactionManager"/>

    //java代码中
    @Transactional
    public class UserDaoImpl extends HibernateDaoSupport{
    @Transactional(isolation = Isolation.READ_COMMITTED)  
    public void test1(){...}
    }这个问题,困扰了我很长时间,在网上搜的都不太准确,
    不过我建议你看一看传智博客关于这方面的视频教程
    我刚看完
    这个链接可以免费下载http://bbs.langsin.com/search.php?searchid=43&orderby=lastpost&ascdesc=desc&searchsubmit=yes
    非常好的,而且文件不大希望对你有帮助
      

  2.   

    补充一下
     <context:component-scan base-package="com.bluesky" />
    这个是不需要的,属于失误,
    它是spring用来自动扫描bean的
      

  3.   

    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>有以insert开头的方法走第一个。*所有的。
      

  4.   

    对没错!  <prop key="*">PROPAGATION_REQUIRED </prop> 就是所有的!
      

  5.   

    <!-- 配置事务 -->
    <!-- 事务管理实体 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref bean="sessionFactory"/>
    </property>
    </bean>

    <!-- 事务配置 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <!-- 查询方法只读 -->
    <tx:method name="find*" propagation="REQUIRED" read-only="true"/>
    <!-- 其它方法使用普通事务 -->
    <tx:method name="insert*" propagation="REQUIRED" />
    <tx:method name="delete*" propagation="REQUIRED" />
    <tx:method name="update*" propagation="REQUIRED" />
    </tx:attributes>
    </tx:advice>

    <!-- aop切入 -->
    <aop:config>
    <!--  AspackJ语言 -->
    <aop:pointcut expression="execution(* com.sun.service.*.*(..))" id="interCut"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="interCut"/>
    </aop:config>
    这样写啦