Java 难以编写具有事务性支持的多线程集成测试
假设此规范/测试使用:(该概念在Java中可能类似,因此我也将帖子标记为Java)Java 难以编写具有事务性支持的多线程集成测试,java,multithreading,scala,transactions,specs2,Java,Multithreading,Scala,Transactions,Specs2,假设此规范/测试使用:(该概念在Java中可能类似,因此我也将帖子标记为Java) all方法定义为: def all = Future[List[Meetings]] { // Returns the future while executing the DB request } 问题是结果不是2,而是0 事实上,我注意到创建和检索并不是在同一个事务中发生的(因为一个Spring事务是由Specs2示例创建的,尤其是每个线程创建的) 更准确地说,由检索线程管理的读取事务无法看到创建
all
方法定义为:
def all = Future[List[Meetings]] {
// Returns the future while executing the DB request
}
问题是结果不是2
,而是0
事实上,我注意到创建和检索并不是在同一个事务中发生的(因为一个Spring事务是由Specs2示例创建的,尤其是每个线程创建的) 更准确地说,由检索线程管理的读取事务无法看到创建的会议,因为这些会议属于Spec事务(在Spec方法中使用@Transactional),并且尚未提交。
当然,检索结果显示:“没有会议!” 我该如何处理这个案子?
我考虑让创建和检索共享同一事务,即使我应该在Specs2类上取下
@Transactional
,并手动处理它们
我是否应该首先创建一个未来
,管理会议创建,然后将其与检索链接起来,整个链接在同一个线程中?如果这种机制可行,有人可以举个例子吗 当然,当我不使用任何多线程(没有
Future
)时,整个过程都可以正常工作
注意:我在主流程中使用了一个事务,因为我想在Specs2示例的每一端回滚我的会议。我发现了这篇关于这个问题的好文章:
def all = Future[List[Meetings]] {
// Returns the future while executing the DB request
}