gpt4 book ai didi

spring 在集成测试中启动并行事务

转载 作者:行者123 更新时间:2023-12-04 15:32:28 26 4
gpt4 key购买 nike

我一直在寻找解决方案,但似乎找不到一个好的解决方案。
我有一个复杂的场景,我想评估 hibernate 的行为乐观锁定 vs 悲观锁定

执行此操作的最佳位置是在一组良好的集成测试中,但我似乎无法找到启动并行事务的干净方法。

  • 如何在 中创建 2 个并行事务 Spring 集成测试无需手动创建线程和注入(inject) SessionFactory 对象。

  • 请注意,我还没有找到在不产生至少 2 个线程的情况下创建 2 个并行事务的方法(也许有一种方法,我希望你能给我看一个例子)。

    最佳答案

    由于评论空间不足,因此将此添加为答案:

    过去,我通过创建不同的 EntityManager/Session 并随后注入(inject)它们来在 vanilla Spring 上进行测试。我不确定如何从 Spring 集成测试中做到这一点,但它可能会引发一个想法。

    在下面的代码中,Account 是一个带有版本的小对象。如果可以使用自定义实体管理器实例化 Spring Integration 流(或任何被调用的),则可以实现相同的目的。

    public void shouldThrowOptimisticLockException() {
    EntityManager em1 = emf().createEntityManager();
    EntityManager em2 = emf().createEntityManager();
    EntityTransaction tx1 = em1.getTransaction();
    tx1.begin();

    Account account = new Account();
    account.setName("Jack");
    account.updateAudit("Tim");

    em1.persist(account);
    tx1.commit();


    tx1.begin();
    Account account1 = em1.find(Account.class, 1L);
    account1.setName("Peter");

    EntityTransaction tx2 = em2.getTransaction();
    tx2.begin();
    Account account2 = em2.find(Account.class, 1L);
    account2.setName("Clark");

    tx2.commit();
    em2.close();

    tx1.commit(); //exception is thrown here
    em1.close();
    }

    关于spring 在集成测试中启动并行事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35503226/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com