• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

PESSIMISTIC_WRITE 테스트 시 테스트 클래스 위 @Transactional

23.05.12 19:09 작성 조회수 517

0

@Transactional
@SpringBootTest
class StockServiceTest {

    @Autowired
    private StockService stockService;

    @Autowired
    private PessimisticLockService pessimisticLockService;

    @Autowired
    private StockRepository stockRepository;

    @BeforeEach
    public void before()
    {

안녕하세요

PESSIMISTIC_WRITE 예제처럼 테스트 시에

@Transactional

을 붙이면 테스트가 첫 스레드풀 사이즈 만큼의 쿼리만 나가고 계속 대기 중입니다.

혹시 원인을 알수 있을까요?스크린샷 2023-05-12 오후 7.09.21.png

답변 1

답변을 작성해보세요.

1

sagadadd 님 안녕하세요.

@Transactional 어노테이션을 붙이면 메소드 실행전에 트랜잭션을 취득하고 메소드가 종료된 이후에 트랜잭션을 반납하게 됩니다.

Test method 가 트랜잭션을 취득한 상태에서 A 스레드가 쿼리가 실행되는순간 락을 취득하게 됩니다.

그리고 B (A 이외의 다른) 스레드에서 데이터를 가져가려고할때 이미 락이 걸려있기때문에 락이 종료될때까지 기다리게됩니다.

락이 종료되려면 메소드가 종료되어야 하는데, B 스레드가 아직 락을 기다리는중이기때문에 메소드가 종료되지 않습니다.

그렇기에 계속 대기하는것입니다.

추가적인 질문이 있으시다면 댓글 혹은 질문 남겨주세요!

감사합니다.

 

eeeeeqweewqe님의 프로필

eeeeeqweewqe

2023.10.23

자세한 답변 주셔서 감사합니다.