java - 在 JUnit 中测试 REQUIRES_NEW

标签 java spring spring-transactions

运行我的测试时,它在调用 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 数据库和两个数据源,则测试通过...

最佳答案

正如 mrembisz 所说,您正在尝试同时/线程获得 2 个连接。

  1. 对于测试本身,它将在测试期间存在
  2. 对于方法调用,该方法在调用期间一直存在。

我在稍微不同的情况下遇到了同样的事情。

解决此问题的两种方法:

  1. 将传播更改为REQUIRED,这样您就可以重用测试最初获取的连接。
  2. 增加池大小,但请记住,您需要考虑同时更新的最大数量,大致为maxThreadPoolSize >= (maxSimultaniousUpdates + 1) +(其他 Activity 的最小大小) (如果列表中有 1 个待处理连接,则最终所有待处理操作都会完成)。否则,这将在生产中重新出现。

在我看来,第一个解决方案似乎更好,当然,如果它不损害你的逻辑:)

关于java - 在 JUnit 中测试 REQUIRES_NEW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9063046/

相关文章:

java - 在 Unity 中使用 Google Api Java 类?

java - SPRING:将自定义用户详细信息添加到 spring 安全用户

java - 如何为 Async Spring 使用多个 threadPoolExecutor

Java AJAX 变量传递

java - int 除以 int 得到 BigDecimal

java - 找不到依赖项 : expected at least 1 bean 的 [HrEmployeesReportOutput] 类型的合格 bean

ejb-3.0 - TransactionManagementType.CONTAINER 与 TransactionManagementType.BEAN

java - 我是否需要用 try-catch 包含所有 saveOrUpdate 方法?

spring - 无法仅在 Spring Data Neo4j 中将事务标记为回滚

java - 避免并发修改异常