일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- #프로그래머스 #자바 #코딩 #무작위로k개의수뽑기
- #프로그래머스 #코딩 #자바 #2의영역
- #batch #스케줄러 #배치스케줄러
- #프로그래머스 #코딩 #자바 #왼쪽오른쪽
- #프로그래머스 #자바 #코딩 #특정문자열로끝나는가장긴부분문자열찾기
- #프로그래머스 #코딩 #자바 #수열과구간쿼리1
- #프로그래머스 #코딩 #l로만들기
- #프로그래머스 #코딩 #배열만들기3
- #프로그래머스 #코딩 #문자열뒤집기 #자바
- #프로그래머스 #코딩 #자바 #수열과구간쿼리2
- #프로그래머스 #코딩 #x사이의개수
- #신념 #철학 #유쾌함 #후회 #자책
- #프로그래머스 #코딩 #문자열잘라서정렬하기
- #프로그래머스 #코딩 #자바 #빈배열에추가삭제하기
- #프로그래머스 #코딩 #자바 #문자열이몇번등장하는지세기
- #프로그래머스 #코딩 #글자지우기 #자바
- #프로그래머스 #코딩 #자바 #리스트자르기
- springboot #sprinigbatch #job #step #스프링부트배치 #스프링배치
- #프로그래머스 #코딩 #배열의길이에따라다른연산하기
- #프로그래머스 #코딩 #자바 #문자열여러번뒤집기
- #프로그래머스 #코딩 #자바 #문자열묶기
- #springbatch #springboot #스프링배치 #스프링부트 #배치 #joblauncher #job #step #itemreader #itemprocessor #itemwriter
- #프로그래머스 #자바 #코딩 #배열만들기2
- #프로그래머스 #코딩 #배열원소 삭제하기
- #프로그래머스 #자바 #코딩 #전국대회선발
- #springbatch #springboot #스프링배치 #스프링부트 #배치 #joblauncher #job #step #batchconfig #배치설정 #chunk
- #프로그래머스
- #프로그래머스 #코딩 #자바 #수열과구간쿼리3
- 코딩 #자바 #조건에맞게수열변환하기2
- #프로그래머스 #코딩 #배열비교하기
- Today
- Total
David의 블로그
[Spring Boot] 대량의 데이터를 한번에 처리하는 Spring Batch. 두번째 본문
2025.04.15 - [프로그래밍/Spring Boot] - [Spring Boot] 대량의 데이터를 한번에 처리하는 Spring Batch. 첫번째
[Spring Boot] 대량의 데이터를 한번에 처리하는 Spring Batch. 첫번째
"Spring Batch"는 대량의 데이터를 효율적으로 처리하기 위한 프레임워크로, 주로 반복적이고 주기적인 작업을 수행하는데사용됩니다. 이 프레임워크는 스프링 프레임워크를 기반으로 하며, 다양
78alswo.tistory.com
이전에는 Spring Batch를 쓰기 위해서 gradle에 라이브러리 추가와
버전을 알아보면서, Batch의 개념을 알아보았다.
이번에는 소스를 구현하면서 진행해 보도록 하겠다.
먼저, 프로젝트를 실행하면 Batch 자동실행을 막기위해서 application.properties파일에 아래처럼 추가한다.
```application.properties```
그리고 스케줄링 기능을 활성화해주기 위해서
@EnableScheduling 어노테이션을
SpringBootApplication 클래스에다가 추가한다.
```yourSpringBootApplication.java```
1
2
3
4
5
6
7
8
9
|
@SpringBootApplication
@EnableScheduling
public class yourSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(yourSpringBootApplication.class, args);
}
}
|
cs |
이 어노테이션을 사용하면 Spring의 스케줄링 기능을 통해 정기적으로 특정 작업을 수행할 수 있다.
다음은 스케줄링 설정 파일을 만든다.
```FirstSchedule.java```
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
@Configuration
@Slf4j
public class FirstSchedule {
private final JobLauncher jobLauncher;
public FirstSchedule(JobLauncher jobLauncher) {
this.jobLauncher = jobLauncher;
}
@Autowired
private Job batchMstCRUDJob;
@Autowired
private Job requestCrawlerJob;
@Scheduled(cron = "* * 18 * * *", zone = "Asia/Seoul")
public void runFirstJob() throws Exception {
// 현재 날짜와 시간 가져오기
LocalDateTime now = LocalDateTime.now();
// 포맷 정의
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String todayDate = now.format(dateFormat);
JobParameters jobParameters = new JobParametersBuilder()
.addString("date", todayDate)
.toJobParameters();
// requestCrawler Job 실행
JobExecution requestCrawlerExecution = jobLauncher.run(requestCrawlerJob, jobParameters);
// requestCrawler Job이 성공적으로 완료되었는지 확인
if (requestCrawlerExecution.getStatus().isUnsuccessful()) {
// 실패한 경우 로그를 남기거나 예외 처리
log.info("requestCrawlerJob 실행 실패: {}", requestCrawlerExecution.getAllFailureExceptions());
// System.out.println("requestCrawlerJob 실행 실패: " + requestCrawlerExecution.getAllFailureExceptions());
return; // 첫 번째 Job을 실행하지 않음
}
// firstJob 실행
JobExecution firstJobExecution = jobLauncher.run(batchMstCRUDJob, jobParameters);
log.info("batchMstCRUDJob 실행 완료: {}", firstJobExecution.getStatus());
// System.out.println("batchMstCRUDJob 실행 완료: " + firstJobExecution.getStatus());
}
}
|
cs |
5번 줄의 JobLauncher 인스턴스는 33, 44번 줄처럼 설정한 Job을 실행한다.
12, 15번줄은 Job으로 설정한 인스턴스다.
17번줄은 해당 Batch작업을(크론표현식 매일 18시) 실행하도록 설정했다.
29, 30번줄은 todayDate라는 현재날짜시간을 String값으로 넣었는데, 이는 Batch가 실행하면서 중복을 방지하기 위해
변수를 넣었다.
그리고 36 ~ 40번은 필자는 Job2개 등록을 했는데,
행여나 비동기식으로 batchMstCRUDJob 종료가 안됐는데,
다음 Job이 실행되는 오류를 막기위해 구현한 소스다.
따라서
batchMstCRUDJob가 먼저 실행이되고 종료가 됐다고 판단되면
requestCrawlerJob을 실행하는 것이다.
아래는 Spring Batch 모식도다.
알고 넘어가야할것이
JobLauncher는 정의된 Job을 실행하는 역할을 한다.
Job은 Spring Batch를 실행하는 작업 단위를 말한다.
Job은 Step으로 이루어져있고, Step은 대량의 데이터를 Read/Processor/Write
즉, 읽고/처리하고/쓰는 작업으로 이루어져있다.
이렇게 스케줄러 설정 파일 만드는 방법과
Batch자동 실행 방지, Batch 모식도를 알아보았다.
다음 시간에 마지막 Batch소스 설정파일을 만들어 마무리 짓도록 하겠다.
유익했으면 공감과 좋아요. 댓글 부탁드립니다!
'프로그래밍 > Spring Boot' 카테고리의 다른 글
[Spring Boot]대량의 데이터를 한번에 처리하는 Spring Batch. 세번째 (0) | 2025.04.16 |
---|---|
[Spring Boot] 대량의 데이터를 한번에 처리하는 Spring Batch. 첫번째 (0) | 2025.04.15 |