2015-04-24 110 views
0

我有豆進入如下春呼叫所需的方法

<bean id="inspectReqImpl" 
     class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
     <property name="transactionManager" ref="transactionManager" /> 
     <property name="transactionAttributes"> 
      <props> 
       <prop key="activateRequest">PROPAGATION_REQUIRES_NEW</prop>        
       <prop key="*">PROPAGATION_REQUIRED</prop> 
      </props> 
     </property> 
     <property name="target"> 
      <bean 
       class="com.test.InspectRequestImpl">     
      </bean> 
     </property> 
</bean> 

<bean id="inspectReqProcess" 
     class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
     <property name="transactionManager" ref="transactionManager" /> 
     <property name="transactionAttributes"> 
      <props>    
       <prop key="*">PROPAGATION_REQUIRED</prop> 
      </props> 
     </property> 
     <property name="target"> 
      <bean 
       class="com.test.InspectRequestProcessImpl">    
      </bean> 
     </property> 
</bean> 

當我打電話com.test.InspectRequestImpl.activateRequest()方法,那麼Spring將

public void activateRequest() 
{ 

Calling method of InspectRequestProcessImpl(ex: processRequest()) 
For InspectRequestProcessImpl we have defined all methods as PROPAGATION_REQUIRED 

} 

因此,創建新的交易如果任何異常(選中或未選中)出現在方法(InspectRequestProcessImpl.processRequest())中,交易傳播爲REQUIRED那麼會對交易傳播的InspectRequestImpl.activateRequest()有什麼影響REQUIRED_NEW

  • 春天在這種情況下會如何表現。它會提交InspectRequestImpl.activateRequest()還是回滾?
  • 它只是回滾InspectRequestProcessImpl.processRequest()的內容還是會引發異常?

回答

1

默認行爲是在檢查異常之後提交併在未選中之後回滾。

如果您希望在檢查異常之後執行回滾,請將回滾規則添加到您的事務規範中。 對於特定的異常使用「PROPAGATION_REQUIRED,-Exception」或對於特定的異常使用「PROPAGATION_REQUIRED,-MyException」。

如果您的方法聲明拋出異常,則拋出異常,否則拋出異常。 Spring不會傳播異常......你可以嘗試/捕獲異常並且什麼也不做。