Spring 自动代理事务 中碰到了事务无法回滚的问题


我是一个spring 学习的初手, 在学习spring in action这本书的 事务自动代理 章节时,按照所说的方式,我先配置了一个自动代理和事务属性源advisor,如下:

 

<bean id="autoproxy"
          class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
 </bean>

 <bean id="transactionAdvisor"
       class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
  <constructor-arg>
           <ref bean="tranInterceptor" />
   </constructor-arg>
 </bean>
<bean id="tranInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager">
          <ref bean="hibernateTranManager" />
  </property>
  <property name="transactionAttributeSource">
        <ref bean="tranAttribute1" />
  </property>
 </bean>

 

 而后,我配置属性源,书上说有两种方式位自动代理选择一个属性源

 

一:

<bean id="tranAttribute1"
		class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
		<property name="properties">
			<props>
				<prop key="insertPerson">
					PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ,-PersonException
				</prop>
			</props>
		</property>
	</bean>

 在我的测试代码中,事务是可以回滚的,也就是说,-PersonException是起作用的,测试代码我贴上部分

public void insertPerson(final Person p) throws PersonException{
		getHibernateTemplate().save(p);		
		throw new PersonException();
	}

  但是,当我按照第二种方式配置属性源,则,没有预期的产生事务回滚:

	<bean id="tranAttribute2"
		class="org.springframework.transaction.interceptor.MethodMapTransactionAttributeSource">
		<property name="methodMap">
		  <map>
			<entry key="com.dao.PersonDao1.insertPerson">					
				<value>
					PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ,-PersonException				</value>
			</entry>
		  </map>
		</property>
	</bean>

 

PS:用第二种属性源测试的时候,我上述拦截器tranInterceptor的transactionAttributeSource我换成了tranAttribute2的。

 

期望达人能帮小弟解决这个学习上的疑惑

 

谢谢

 

 

PS:此问题已经解决

 

问题的原因是:

 <entry key="com.dao.PersonDao1.insertPerson">
<value>
PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ,-PersonException </value>
</entry>


中的 <entry key="com.dao.PersonDao1.insertPerson">中的 key属性要是接口,而不是实际类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值