작성
·
98
0
안녕하세요 강의 잘 듣고 있는 수강생입니다.
다름이 아니라 배운 내용을 바탕으로 실무에서 @Scheduled를 사용해서 스케줄러를 구현했는데, 스케줄러가 호출하는 메서드를 다른 컴포넌트로 분리해서 @Transactional로 분리했음에도, 로그를 찍어보면 애플리케이션 단에서는 값이 잘 바뀌는데.. 실제 DB값이 수정이 되지 않습니다..
entitymanager.flush, PlatformTransactionManager transactionManager 을 통해 commit을 수동으로 해줘도 db값이 변경이 안됩니다..ㅠㅠ
TransactionSynchronizationManager.isActualTransactionActive();`
이런식으로 transaction이 활성화되있는지를 확인해도 true로 나오는데,, db 값이 안바뀝니다 ㅠ
어떻게 해결해야할까요 ㅠ
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
jayjoy05님이 겪고 있는 문제는 @Scheduled
와 트랜잭션 관리 간의 일반적인 문제일 수 있습니다. @Scheduled
메서드 호출은 기본적으로 트랜잭션 컨텍스트가 없기 때문입니다. 이는 트랜잭션이 예상대로 작동하지 않을 수 있는 상황을 초래할 수 있습니다. 다음 해결책을 시도해 보세요.
AOP Proxy 설정 확인
@Scheduled
메서드는 Spring의 AOP Proxy가 적용되지 않아 트랜잭션 관리를 하지 않을 수 있습니다. 가능한 해결책은 트랜잭션이 필요한 메서드를 외부 서비스로 분리하고 그 서비스를 @Transactional
로 설정하는 것입니다. 이 방법은 Spring AOP Proxy가 트랜잭션 관리를 지원할 수 있도록 하기 위함입니다.
트랜잭션 전파 설정 확인
@Transactional
메서드에 대한 전파(propagation) 설정을 확인해 보세요. 기본 전파 수준은 REQUIRED
이며, 이 설정은 현재 트랜잭션이 없을 경우 새로운 트랜잭션을 시작하도록 합니다. 그러나 이 설정이 상황에 맞지 않다면 전파 설정을 조정해야 할 수도 있습니다.
트랜잭션 매니저 설정 확인
PlatformTransactionManager
를 사용하여 수동으로 커밋을 시도했다면, 트랜잭션 매니저가 올바르게 설정되어 있는지 확인하십시오. 필요한 경우, JPA 트랜잭션 매니저를 사용하고 있는지 확인하세요.
로그와 기본적인 검증
로그를 통해 트랜잭션 시작과 종료 시점을 확인하고 오류나 경고 메시지가 있는지 점검하세요. 또한 @Transactional
이 예상한 메서드에 명확히 적용되었는지 검증하십시오.
카탈로그 및 트랜잭션 관리 설정 업데이트
application.properties
또는 application.yml
파일을 점검하여 데이터베이스와 연결된 설정이 잘 되어 있는지 확인하세요.
위의 방법을 통해 문제를 해결할 수 있기를 바랍니다. 필요하면 추가적인 정보를 제공해 주시면 더 도와드릴 수 있습니다.
출처 및 자세한 내용은 Spring Data JPA Reference Documentation에서 확인하실 수 있습니다.