문제 요약 Spring Batch Tasklet 내부에서 슬레이브(readOnly) DataSource를 통해 조회를 수행 중 예외 발생 시, PlatformTransactionManager의 rollback 처리 후 커넥션이 반환되지 않는 문제가 발생하였습니다. 원인 분석 개선 방안 또는 명시적 반환 방식:
spring batch
Spring Batch 작업을 Kubernetes CronJob으로 병렬 처리할 때의 고려사항과 커넥션 오류 대응 전략
✅ 1. Spring Batch를 Kubernetes CronJob에서 병렬로 실행하려는 시나리오 ✅ 2. HikariCP 경고: “Apparent connection leak detected” ✅ 3. MyBatis 쿼리가 길어질 때 INSERT 타임아웃 처리 @Options(timeout = 5)void insertMyData(@Param(“list”) List<MyDto> list); ✅ 4. 커넥션 오류 예외 예시 (Unknown thread id) ✅ 5. 기존 Step을 Partitioning Step으로 전환할 수 있는가?
Aurora MySQL Signal 11 Crash 분석과 Spring Boot 커넥션 오류 대응 전략
🧭 개요 2025년 3월 26일, AWS Aurora MySQL 환경에서 Signal 11로 인해 데이터베이스가 비정상 종료되는 장애가 발생했습니다. 이와 동시에 Spring Boot 기반의 배치 애플리케이션에서는 커넥션 풀 오류로 애플리케이션 구동 실패가 발생했으며, 이 글에서는 그 원인과 해결 방안을 상세히 정리합니다. ⏱ 장애 타임라인 요약 항목 시각 DB 다운 발생 2025-03-26 10:54:19 더 읽기
Spring Batch Kubernetes 종료 처리: graceful shutdown, shutdown hook, 컨테이너 runtime hang 완전 정복
Kubernetes 환경에서 sample-batch 시스템은 Java 기반의 Spring Batch Job을 실행하고 있으며, 안정적인 종료 처리가 매우 중요합니다. 특히 다음과 같은 요구사항을 만족해야 합니다: 이를 위해 다음 설정 및 코드 전략을 활용했습니다: ✅ 핵심 설정 yaml복사편집activeDeadlineSeconds: 180 terminationGracePeriodSeconds: 10 ✅ 코드 전략 요약 1. Shutdown Hook에서 Whatap 처리 및 Thread 정리 Runtime.getRuntime().addShutdownHook(new 더 읽기
Kubernetes CronJob 강제 종료 및 graceful shutdown 처리 방법 (Spring Batch + 모니터링 연동)
Kubernetes CronJob을 활용해 Java 기반 Spring Batch 작업을 수행하는 환경에서, 작업 시간이 초과되었을 때의 강제 종료 처리가 필요할 수 있습니다. 이를 위해 activeDeadlineSeconds를 활용하면 설정된 시간 초과 시 작업을 종료할 수 있습니다. 그러나 기본적으로 Kubernetes는 종료 시 SIGTERM을 먼저 보내고, 이후 terminationGracePeriodSeconds 동안 graceful shutdown을 기다립니다. 이 시간이 지나야 SIGKILL을 더 읽기
Spring BeanCreationNotAllowedException: Singleton Bean 생성 오류와 종료 시점 문제 해결법
1. 오류 메시지 Spring 종료 시 다음과 같은 예외가 발생할 수 있습니다: 2. 발생 시점 Spring 애플리케이션 종료 중, 별도 쓰레드 또는 병렬 처리 중에 ApplicationContext.getBean() 을 호출하는 경우에 발생합니다. 예를 들어 다음은 비동기 처리 로직 내에서 Bean을 호출한 경우입니다: 3. 주요 원인 4. 해결 방법 4.1 Bean 사전 주입 더 읽기
Spring Batch 병렬 처리 시 “Scope ‘job’ is not active” 오류 해결 방법 (Spring Boot 3 + Batch 5)
Spring Batch 병렬 처리 시 발생하는 Scope ‘job’ is not active 오류와 해결 방법 Spring Boot 3 + Spring Batch 5 환경에서 병렬 Step 처리(TaskExecutorPartitionHandler)를 구현하던 중 다음과 같은 오류가 발생할 수 있습니다: Scope ‘job’ is not active for the current threadNo context holder available for job scope 해당 오류는 더 읽기
Spring Batch Stack Trace 분석: 예외 발생 위치와 전달 순서 이해하기
Spring Batch 기반의 배치 작업을 수행하던 중 다음과 같은 예외가 발생했습니다. com.sample.common.exception.CustomException: 테스트용 오류 발생 예시입니다. at com.sample.batch.job.ExampleJob.lambda$1(ExampleJob.java:174) … at com.sample.SampleBatchApplication.main(SampleBatchApplication.java:118) 해당 Stack Trace를 보면 ExampleJob.lambda$1 메서드에서 CustomException이 발생했으며, 이 예외는 Spring Batch 내부 프로세스를 거쳐 main() 메서드까지 전파되었습니다. 이를 이해하기 위해 다음과 같은 예외 전달 순서를 주목할 수 있습니다: 더 읽기
Kubernetes 환경에서 Spring Boot 배치 오류 전파 및 종료 코드 처리
1. 문제 상황 Spring Boot 기반 배치 애플리케이션을 실행하는 과정에서 오류 발생 시 CallRunner까지 예외 전파 및 종료 코드 처리가 제대로 이루어지지 않는 문제가 발생했다. 2. 원인 분석 3. 해결 방법 ✅ 1️⃣ 예외가 CallRunner까지 정상적으로 전파되도록 설정 ✅ 2️⃣ System.exit() 실행 위치 조정 ✅ 3️⃣ Kubernetes Pod 종료 상태 더 읽기
Spring Batch 오류 전파 및 NOOP 해결 방법 (자동 실행 vs 수동 실행)
Spring Batch 실행 중 오류가 main()까지 전달되지 않는 문제와 NOOP 상태(All steps already completed or no steps configured for this job.) 발생 문제를 해결하는 방법을 정리합니다.자동 실행(Spring Boot spring.batch.job.enabled=true)과 수동 실행(spring.batch.job.enabled=false 후 JobLauncher 직접 호출) 방식에 맞게 정리하였습니다. 1. Spring Batch 오류 전파 문제 🔍 문제 상황 2. 자동 실행 더 읽기