JDBC setReadOnly 호출 이슈 해결기
문제AWS Advanced JDBC Wrapper를 쓰는 Spring Boot 환경에서 트랜잭션 종료 시점에 "Cannot change transaction read-only property in the middle of a transaction" 에러가 간헐적으로 났다.
접근래퍼의 Failover 플러그인이 토폴로지 캐시 만료 시 쿼리를 실행해 트랜잭션 상태가 OPEN으로 바뀌는 것을 디버깅으로 찾아냈다. Spring 6.1.2의 LazyConnectionDataSourceProxy.setReadOnlyDataSource로 읽기 전용 DataSource를 분리해 setReadOnly 호출 자체를 없앴다.
결과읽기 전용 트랜잭션에서 setReadOnly가 호출되지 않아 에러가 사라졌고, Failover 동작과 트랜잭션 경계의 충돌을 구조적으로 해결했다.
이 글과 비슷한
- 백엔드·
stackoverflow-blog·#cpp#reflection#metaprogramming+1 - 백엔드·
네이버페이·Composite PK에서 시작된 Spring Boot 4 / Spring Batch 6 업그레이드 기록
문제Spring Data JDBC 의 Composite ID 적용을 위해 Spring Boot 3.5 → 4.0.1 업그레이드 시 Spring Batch, Kotlin, Jackson 등 전체 스택 메이저 전환 필요.
접근Spring Boot 4 / Spring Batch 6 / Spring Framework 7 / Kotlin 2.3 / Jackson 3 / Kotest 6 / Gradle 9 / ojdbc11 순차 업그레이드. Composite ID 는 Persistable 인터페이스로 구현, JdbcDefaultBatchConfiguration 상속으로 메타데이터 저장.
결과기술 부채 해결 + 장기 유지보수성 개선. 운영 DB 접근 정책 충돌을 사전 식별해 안정적 배포 달성.
#kotlin#spring#spring-boot+3 - 백엔드·
airbnb-eng·Skipper: Building Airbnb’s embedded workflow engine
#airbnb#workflow-engine#skipper+1