Spring

(@Scheduled 관련) 스케쥴러 관련 메소드안에 JPA 저장하는 메서드가 같이 있을 경우 저장이 안되는 오류

쿠카이든 2023. 8. 24. 11:59
728x90
  • 스케쥴러 메소드안에 JPA 저장하는 메서드가 같이 있을 경우, 저장이 안되는 오류가 발생하였다.

실제 값은 들어있지만 저장할 시에 값이 없다고 오류가 발생하였다.
오류 발생 화면
DB에서 완료로 바뀌어야 되는 상태가 바뀌지 않았음

 

  • 스케쥴러가 돌면서 JPA의 프록시에 있는 값에 영향을 준다(프록시 초기화)고 한다.
  • 또한, 트랜잭션 매니저가 @EnableTransactionManagement를 통해 DataSourceTransactionManager로 구성된 경우, 하이버네이트의 begin() 메소드가 AbstractTransactionImpl을 부르지 않는다고 한다.

 

  • 해결 → @Scheduled 클래스와 @Transacional이 있는 xxService를 분리하여 해결한다.
//예제
class schedule {
  @Schedule
  go() {
    service.call();
  }
}

@Transactional
class xxService {
  call() {...};
}
  • 스케쥴러와 트랜잭션이 가진 프록시가 분리됨으로써 문제가 해결됨을 볼 수 있었다.
 

스케쥴링 후, 상태가 진행중 → 완료로 변경됨을 확인

 

참고 : https://www.inflearn.com/questions/297130/scheduled-%EC%82%AC%EC%9A%A9-%EC%8B%9C-transactional-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%82%AC%EC%9A%A9-%EC%8B%A4%ED%8C%A8-%EA%B4%80%EB%A0%A8

 

@Scheduled 사용 시 @Transactional 메소드 사용 실패 관련 - 인프런 | 질문 & 답변

안녕하세요, 강의 잘 듣고 있습니다!!JPA 사용 중에 강의만으로는 어려운 문제를 만나 문의드립니다!JPA 트랜잭션에 대한 오류인것 같고 꽤 오래 찾아았으나, 아직 답을 찾지 못했습니다.현상은 @S

www.inflearn.com

 

728x90