스프링 트랜잭션 처리 @Transactional
스프링 AOP (관점 지향 프로그래밍) 기반 기능
1 @Transactional이 포함된 메소드가 호출되면
2 프록시 객체를 생성
3 트랜잭션 생성 및 커밋 또는 롤백 후 트랜잭션 닫는 작업을 프록시 객체에게 위임한다.
스프링 AOP 기반으로 하는 기능들 (@Transactional, @Cacheable, @Async) 사용시 self invocation 문제로 인하여 장애가 발생할 수 있다
self invocation 해결 방법
방법 1. 트랜잭션 위치를 외부에서 호출하는 bar() 으로 이동
방법 2. 객체의 책임을 최대한 분리하여 외부 호출 하도록 리팩토링
Spring Transactional 주의사항
@Transactional(readOnly = true)
트랜잭션을 읽기 전용으로 설정하면 JPA에서 스냅샷 저장 및 Dirty Checking 작업을 수행하지 않는다.
=> 성능적으로 도움이된다.
클래스보다 메소드가 우선순위가 높다.
SimpleJpaRepository - 클래스에 @Transactional(readOnly=true) 적용해놓고 업데이트가 발생하는 메소드에만 readOnly=false 우선 적용
728x90
반응형
'개발공부 > JAVA Spring' 카테고리의 다른 글
Java/Spring 공공 기관 데이터 셋업 하기 (0) | 2023.01.24 |
---|---|
API 재호출 라이브러리 - Spring Retry (0) | 2023.01.22 |
JPA Auditing (0) | 2023.01.21 |
troubleshooting - Failed to load ApplicationContext (0) | 2023.01.19 |
Spring Data JPA 주의사항 - 영속성 컨텍스트 (0) | 2023.01.19 |
댓글