【发布时间】:2012-10-15 17:30:09
【问题描述】:
我的目标是使用单元测试在我的应用程序中引发乐观锁定异常。我已经在理论上了解了如何做到这一点。但我在实践中遇到的问题是如何维护两个线程之间的事务?
所以,这就是我到目前为止所做的:
我正在使用 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(类似于这里描述的:Any good Spring threading with a TaskExecutor examples?)
但是我必须做些什么来维护两个线程之间的事务呢?我尝试过使用 @Transactional 注释 run() 方法之类的东西,但这不起作用。
【问题讨论】:
-
事务上下文在 ThreadLocal 中维护,一般不会跨多个线程传播。
-
对替代品有什么建议吗?
-
可能是如果您使用容器管理的线程(如 websphere workmanaer),容器可能会跨线程传播上下文。我不确定只是大声思考。
-
这与您尝试做的类似吗? stackoverflow.com/questions/2455794/…
标签: java spring jakarta-ee jpa