0
我試圖寫悲觀寫入的JUnit測試。我的想法是在一個事務中執行此方法,同時在另一個事務中再次運行此方法,並嘗試修改第一個事務中從該方法返回的元素。我會期待一個異常/超時,因爲第一次調用應該鎖定該行。我做了類似於this的一些事情,但元素被第二個事務(testNewTrans方法)毫不猶豫地修改。有什麼地方我做錯了嗎?Spring Data上的LockModeType.PESSIMISTIC_WRITE
public interface RequestRepository extends CrudRepository<Object, Long> {
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select ... ")
List<Object> findABC(Pageable pageable);
}
在新類的junit
@RunWith(SpringRunner.class)
@DataJpaTest
@TransactionConfiguration(defaultRollback = true)
public class RepositoryTest {
@Configuration
@ComponentScan("test.package")
@ContextConfiguration
public static class SpringConfig {
}
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void testLock() throws InterruptedException {
List<Object> requests1 = requestRepository.findABC(new PageRequest(0, 2));
test22.testNewTrans(); // return empty list
}
@Component
public class Test22 {
private final RequestRepository requestRepository;
public Test22(RequestRepository requestRepository) {
this.requestRepository = requestRepository;
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
private void testNewTrans() {
List<Object> requests2 = requestRepository.findABC(new PageRequest(0, 2));
Object aa = requests2.get(0);
System.out.println("=============>" + aa);
aa.setSomething("abc");
}
}
我可能仍然沒有正確連線。我正在用spring引導和'@ DataJpaTest'測試它。現在,我將testNewTrans()放在一個新的類中,作爲「@ component」和「@ ComponentScan」放到主類中,但它沒有獲取任何數據。我更新了上面的代碼。 @Kayaman – Joseph
你的意思是沒有得到任何數據?我可以想象這是一個棘手的情況在單個測試中進行測試,因爲問題案例與多線程有內在關聯。 – Kayaman