私の目的は、単体テストを使用して、アプリケーションで楽観的ロック例外を引き起こすことです。私はすでに理論的にこれを行う方法を理解しています。しかし、実際の問題は、2 つのスレッド間のトランザクションをどのように維持するかということです。
だから、これは私がこれまでにやったことです:
私はJUnitテストを使用しています:
@RunWith(SpringJUnit4ClassRunner.class)
EntityManager org.springframework.orm.jpa.JpaTransactionManager の使用
各メソッドが定義されている場所@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
でトランザクションを開始し、entityManager.getTransaction().begin();
で終了しますentityManager.getTransaction().rollback());
これは、シングルスレッドテストで保存、更新などに最適です。
複数のスレッドを作成するには、Springs TaskExecutor を使用します (ここで説明されている内容に似ています: TaskExecutor の例を使用した良い Spring スレッドはありますか? ) 。
しかし、2 つのスレッド間のトランザクションを維持するにはどうすればよいでしょうか? @Transactional で run() メソッドに注釈を付けるようなことを試しましたが、これは機能しません。