2011-01-16 72 views
2

我有一個簡單的應用程序,使用org.springframework.jdbc.datasource.DataSourceTransactionManager來管理交易。 我的Spring配置情況如下:DataSourceTransactionManager並測試活動交易

<tx:annotation-driven/> 
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

我已經註釋的方法與@Transactional並打印出TransactionSynchronizationManager.isActualTransactionActive()

但放出來是false。我做錯了什麼?

編輯:我忘了說,我測試與SpringJUnit4ClassRunner.class。我包括TransactionalTestExecutionListener.class,這不起作用。現在它工作後,我擴展類與AbstractTransactionalJUnit4SpringContextTests

+0

你如何調用該方法? – axtavt

回答

0

我想你忘了將下面添加到您的cfg文件。當您使用註釋時,這是必需的。你有沒有添加這個?

<tx:annotation-driven/> 

這裏是命名空間

xmlns:tx="http://www.springframework.org/schema/tx" 

xsi:schemaLocation="http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 
0

你使用所需的註解測試類?

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:/spring-....xml") 
@TestExecutionListeners({TransactionalTestExecutionListener.class, DependencyInjectionTestExecutionListener.class}) 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) 
@Transactional(readOnly = false) 
public class MyTest { 
... 
} 

我不知道最後兩位是否真的有必要,我希望我的測試用例來有一個活躍的交易,這就是爲什麼我需要這些。前三個應該足以獲得註釋bean的事務代理。

0

我有同樣的問題,你應該使用這樣的:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
</bean>