Spring - 根据使用的配置文件启用/禁用@Transactional

时间:2016-07-28 00:38:07

标签: java spring hibernate junit transactions

我的应用程序目前使用黄瓜方案作为测试用例。有黄瓜步骤类可以将测试用例转换为junit测试。

我对同一个测试用例有两个配置 - 一个是内存中,另一个是集成的(与数据库通信)。

我有两个弹簧配置文件:“inMemory”& “integratedTest”,两个junit跑步者有两个不同的配置文件开始两个测试。

对于我的综合测试,我用@Transactional注释了黄瓜步骤类来帮助我处理数据库事务。但对于内存中的注释,它不适用于@Transactional。我得到的错误是:

Transaction manager [ResourcelessTransactionManager] does not support transaction suspension.

我使用HibernateTransactionManager作为集成配置文件的事务管理器。

我想知道在使用inMemory配置文件时是否可以以某种方式禁用@Transactional,并在使用integratedTest配置文件时启用它。

欢迎任何其他高级解决方案。

2 个答案:

答案 0 :(得分:0)

您可以将具有Transaction属性的Spring全局事务管理器用作Supports,这仅在已存在时才参与事务。

参考:http://learningviacode.blogspot.com/2012/10/attributes-in-springs-declarative.html

@Transactional(value =" tmanager",propagation = Propagation.SUPPORTS)

答案 1 :(得分:0)

在尝试了一些选项之后,我最后的方法是在doSuspend()上实现ResourcelessTransactionManager(拥有我自己的类实现)。由于suspend()上的AbstractPlatformTransactionManager方法会调用doSuspend(),默认情况下会抛出异常。