728x90
- 스케쥴러 메소드안에 JPA 저장하는 메서드가 같이 있을 경우, 저장이 안되는 오류가 발생하였다.
- 스케쥴러가 돌면서 JPA의 프록시에 있는 값에 영향을 준다(프록시 초기화)고 한다.
- 또한, 트랜잭션 매니저가 @EnableTransactionManagement를 통해 DataSourceTransactionManager로 구성된 경우, 하이버네이트의 begin() 메소드가 AbstractTransactionImpl을 부르지 않는다고 한다.
- 해결 → @Scheduled 클래스와 @Transacional이 있는 xxService를 분리하여 해결한다.
//예제
class schedule {
@Schedule
go() {
service.call();
}
}
@Transactional
class xxService {
call() {...};
}
- 스케쥴러와 트랜잭션이 가진 프록시가 분리됨으로써 문제가 해결됨을 볼 수 있었다.
728x90
'Spring' 카테고리의 다른 글
Bean의 Scope 중 싱글톤과 프로토타입의 차이 (0) | 2024.04.19 |
---|---|
@Controller와 @RestController의 차이점 (0) | 2023.03.05 |
PointCut 표현식 정리 (0) | 2023.03.03 |
(스프링 고급편) 스프링 AOP (0) | 2023.03.02 |
SpringBoot + Mybatis 연동하기 (0) | 2023.01.12 |