JSCODE Logo
블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] 배치 실패시 서버 담당자에게 메일 보내주기

JSCODE 시니
JSCODE 시니
2026. 04. 04.
author
JSCODE 시니
category
Spring Batch
createdAt
Feb 7, 2026 01:13 AM
isPublic
isPublic
series
Spring Batch 입문: 3시간 만에 끝내는 대용량 처리의 기초
slug
spring-batch-failure-email-notification
type
post
updatedAt
Apr 4, 2026 10:00

✅ 1. 이메일 발송기 만들기(Service)

EmailProvider.java
package com.system.batch; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @Slf4j @Component public class EmailProvider { public void send(String to, String subject, String message) { // 실제로는 여기서 SMTP로 메일 발송 log.info("[메일 발송 성공] 받는사람: {}", to); log.info("제목: {}", subject); log.info("내용: {}", message); } }
 

✅ 2. 리스너에서 메일 서비스 호출하기

JobReportListener.java
package com.system.batch; @Slf4j @Component @RequiredArgsConstructor public class JobReportListener { private final EmailProvider emailProvider; @BeforeJob public void before(JobExecution jobExecution) { log.info("배치를 시작합니다. (Job ID: {})", jobExecution.getJobInstanceId()); } @AfterJob public void after(JobExecution jobExecution) { // Job이 실패했는지 확인 if (jobExecution.getStatus() == BatchStatus.FAILED) { //실패 시 메일 발송 emailProvider.send( "admin@mycompany.com", "배치 실패 알림", "Job ID " + jobExecution.getJobInstanceId() + "번이 실패했습니다. 확인 바람!" ); } else { log.info("배치가 성공적으로 끝났습니다."); } } }
 

✅ 3. Configuration에 등록하기

EmailListenerConfig.java
package com.system.batch; @Slf4j @Configuration @RequiredArgsConstructor public class EmailListenerConfig { private final JobRepository jobRepository; private final PlatformTransactionManager transactionManager; private final JobReportListener jobReportListener; // 우리가 만든 리스너 주입 @Bean public Job emailJob() { return new JobBuilder("emailJob", jobRepository) .start(exampleStep()) .listener(jobReportListener) // 리스너 장착 .build(); } @Bean public Step exampleStep() { return new StepBuilder("exampleStep", jobRepository) .tasklet((contribution, chunkContext) -> { log.info("3초 뒤에 에러를 발생시킵니다..."); Thread.sleep(3000); // 여기서 강제로 예외(Exception)를 던져서 배치를 실패시키기 throw new RuntimeException("테스트를 위해 일부러 에러를 발생!"); }, transactionManager) .build(); } }
 

✅ 4. 실행결과 확인하기

# 각 운영체제에 맞는 명령문으로 배치 실행 ./gradlew bootRun --args='--spring.batch.job.name=emailJob'
notion image
 
author
category
Spring Batch
createdAt
Mar 5, 2026 10:56 PM
isPublic
isPublic
series
Spring Batch 입문: 3시간 만에 끝내는 대용량 처리의 기초
slug
type
series-footer
updatedAt
Apr 4, 2026 10:00
📎
이 글은 Spring Batch 입문 강의의 수업 자료 중 일부입니다.