일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- spring boot
- sendFractionalSeconds
- @EntityListeners
- AuditingEntityListener
- mysql not equal null
- deserializer
- MSSQL
- https
- apatch poi
- NamedEntityGraph
- 1*1000
- fractional seconds
- Protecle
- mysql equal null
- 오블완
- 운동해서 광명찾자
- 버전 문자열 비교
- yml
- mysql =
- pooled-lo
- createEntityGraph
- MYSQL
- getEntityGraph
- 티스토리챌린지
- +9:00
- @CreateDate
- getDateCellValue
- EmbeddedId
- load order
- RootGraph
- Today
- Total
Hello
Spring Data JPA 사용 시 service method에 @transactional 없이 transaction 처리되는 이유 본문
Spring Data JPA 사용 시 service method에 @transactional 없이 transaction 처리되는 이유
nari0_0 2023. 8. 2. 12:11트랜잭션 어노테이션을 작성하지 않은 메소드에서 DB호출이 있을 때 TransactionInterceptor.invoke가 호출되어 트랜잭션이 동작하는 것 처럼 보여 디버깅 해보았는데 실행되는 이유는 의외로 단순했다.
Spring Data JPA(Java Persistence API)는 Spring 에서 제공하는 모듈로 JPA를 편하게 사용할 수 있도록 도와준다.
해당 모듈에서 자주 사용하는 기능을 지원하는 JpaRepository interface 를 제공하고 있다.
우리가 JpaRepository를 상속해서서 편하게 db작업을 처리할 수 있는 이유는 기본 구현체인 SimpleJpaRepository가 JpaRepository를 상속한 JpaRepositoryImplementation를 구현하고 있기 때문이다.
SimpleJpaRepository는 @Transactional이 선언되어 있으며 어노테이션은 클래스 수준에서 모든 메서드에 기본값으로 적용됩니다.
write 메소드에는 각각 @Transactional 어노테이션이 작성되어있다.
추가로 알게된 것은 deleteById는 내부적으로 findById를 호출해 객체를 찾아
delete 메소드를 호출한다.
Repository 호출 전까지 Transaction을 제어할 수 있는 작업을 하지 않았다면, JpaRepository를 사용하는 경우 기본적으로 readOnly = true 옵션을 사용하여 동작합니다.
한 메소드에서 여러가지 db작업을 호출 시 트랜잭션 어노테이션을 선언하지 않으면 각각 트랜잭션 새로 열어 사용한다.
레거시 코드에 누락된 부분들이 있어 각각의 트랜잭션이 열렸기 때문에 TransactionInterceptor.invoke가 각각 호출된 것을 알 수 있었다.
void someMethod(){
repository.find();
repository.save();
}
'spring' 카테고리의 다른 글
SpringBoot-ShedLock DuplicateKeyException이슈?? (0) | 2023.09.14 |
---|---|
Spring Data JPA Specification 간단한 사용 (0) | 2023.08.26 |
spring 다국어 지원을 위한 설정 (0) | 2023.03.03 |
Jpa mssql Dialect SQLServer2012 Offset절 사용 (0) | 2021.07.29 |
spring application.properties(.yml) 로드 순서 (0) | 2021.04.12 |