DataSourceTransactionManager 并测试活动事务

发布于 2024-10-12 10:16:29 字数 704 浏览 4 评论 0原文

我有一个简单的应用程序,使用 org.springframework.jdbc.datasource.DataSourceTransactionManager 来管理事务。 我的 spring 配置如下:

<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 扩展类后,它就可以工作了

I have a simple app that use org.springframework.jdbc.datasource.DataSourceTransactionManager to manage the transactions.
My spring config is as follow:

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

I have annotated the method with @Transactional and print out the TransactionSynchronizationManager.isActualTransactionActive()

But the out put is false. What have i done wrong ?

Edit: i forgot to say that i test that with SpringJUnit4ClassRunner.class. I included the TransactionalTestExecutionListener.class and this will not work. Now it worked after i extend the class with AbstractTransactionalJUnit4SpringContextTests

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

熊抱啵儿 2024-10-19 10:16:29

我认为您忘记将以下内容添加到您的 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">

I think you forgot to add the below to your cfg file. this is required when you are using annotations. Have you added this?

<tx:annotation-driven/>

Here is the namespace

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">
等待圉鍢 2024-10-19 10:16:29

您是否在测试类上使用了所需的注释?

@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 的事务代理。

Did you use the required annotations on your test class?

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

I'm not sure whether the last two are really necessary, I want my test cases to have an active transaction that's why I need those. The first three should be enough in order to get transactional proxies for your annotated beans.

漫雪独思 2024-10-19 10:16:29

我遇到了同样的问题,你应该使用这个:

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

I had the same problem, you should use this instead:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文