运行我的测试时,它会在调用method()时挂起。难道我做错了什么?救命啊!
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"beans.xml"})
@Transactional(rollbackFor = Exception.class)
public class Test {
@Test
public void test() {
itemUnderTestDao.method();
// ...
}
}
public class ItemUnderTestDao {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void method() {
// ...
}
}
忘记上面的代码。我现在已经在http://www44.zippyshare.com/v/46865082/file.html上传了一个Eclipse项目(不包括像spring这样的依赖项)。关于如何让测试通过的所有输入都非常感谢!如果我有两个sqlite数据库和两个dataSources,则测试通过...
答案 0 :(得分:0)
您正尝试打开与数据库的第二个连接。由于@Transactional
Test
,REQUIRES_NEW
上的method()
强制另一个连接,因此打开了第一个。
您的连接池可能只允许一个并发连接。检查其大小和数据库配置。
同时检查您的问题并将选定的答案标记为已接受(答案正文旁边的复选标记形状)。
答案 1 :(得分:0)
正如mrembisz所说,你正试图同时获得2个连接/线程。
我在一些不同的情况下遇到了同样的事情。
有两种方法可以解决这个问题:
REQUIRED
,这样您就可以重复使用最初获得的测试的连接。maxThreadPoolSize >= (maxSimultaniousUpdates + 1) + (min size for other activities)
(如果您在列表1挂起连接,最终所有挂起的操作会完成)。 Othrewise会再次出现在制作中。第一种解决方案在我看来更好,如果它不会损害你的逻辑:)