2

我有一个简单的应用程序用于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

4

3 回答 3

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">
于 2011-01-16T17:19:32.547 回答
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 获取事务代理。

于 2011-07-07T12:19:15.517 回答
0

我有同样的问题,你应该改用这个:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
于 2013-06-25T15:15:03.973 回答