2012-02-03 68 views
4

我在Spring 3.0.5中使用基於XML的事務配置。轉移到基於註解不是一種選擇。在基於XML的配置中,等同於@TransactionConfiguration(rollback = true)是什麼?Spring XML tx:相當於@TransactionConfiguration的建議?

目前,我沒有在我的JUnits中強制執行回滾,所以我的數據庫得到了一致的隨機測試數據,必須刪除/清理。另外,我最終在不同的測試運行之間發生PK衝突。

我applicatonContext內容如下:

... 
<!-- Wrap all DAO Implementations in a transaction --> 
<aop:config proxy-target-class="false"> 
    <aop:pointcut id="daoOperation" expression="execution(* com.calculator.dao.impl.*Impl.* (..))" /> 
    <aop:advisor pointcut-ref="daoOperation" advice-ref="txAdvice" /> 
</aop:config> 

<tx:advice id="txAdvice"> 
    <tx:attributes> 
     <tx:method name="*" read-only="true" propagation="REQUIRED"/> 
     <tx:method name="execute*" propagation="REQUIRED"/> 
     <tx:method name="query*" propagation="REQUIRED"/> 
     <tx:method name="insert" propagation="REQUIRED"/> 
     <tx:method name="delete" propagation="REQUIRED"/> 
    </tx:attributes> 
</tx:advice> 

<bean class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> 
    <property name="url" value="${datasource.url}" /> 
    <property name="username" value="${datasource.user}" /> 
    <property name="password" value="${datasource.password}" /> 
    <property name="defaultAutoCommit" value="false" /> 
</bean> 

... 

如何指定我想我所有的JUnits默認回滾?

感謝,

埃裏克

+0

你解決了這個問題嗎?如果是的話,你是如何解決它的? – Xstian 2014-10-13 13:28:40

+0

@ Xstian - 這是一個很久以前的項目。我從來沒有直接找到解決我的問題的方法。我想我最終以這樣的方式重新編寫了我的單元測試,以至於他們從未做過全面的承諾。不幸的是,我不記得比這更多,而且我不再能夠訪問該項目的任何來源。還有可能我咬緊牙關,使用H2 DB而不是Oracle數據庫進行單元測試;我真的不記得了。 – 2014-10-14 02:16:50

回答

1

穿上你的JUnit測試類此配置。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "/pathTo/spring/context/applicationContext.xml") 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) 
@Transactional 
public class LocationDaoTest extends AbstractTransactionalJUnit4SpringContextTests{ 

    @Test 
    public void testDAOsCRUD(){} 
} 

我希望我已經給你所有關於你的問題的答案。