我有一个使用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
答案 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>