Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 难以编写具有事务性支持的多线程集成测试_Java_Multithreading_Scala_Transactions_Specs2 - Fatal编程技术网

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示例创建的,尤其是每个线程创建的) 更准确地说,由检索线程管理的读取事务无法看到创建

假设此规范/测试使用:(该概念在Java中可能类似,因此我也将帖子标记为Java)

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
}