DataSourceTransactionManager并测试活动事务

时间:2011-01-16 17:06:51

标签: spring transactions spring-jdbc

我有一个使用org.springframework.jdbc.datasource.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

扩展课程后,它工作了

3 个答案:

答案 0 :(得分: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">

答案 1 :(得分: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的事务代理。

答案 2 :(得分:0)

我遇到了同样的问题,你应该改用它:

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