일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 가상면접3장
- 리팩터링2판테스트
- 시스템설계방법
- 테스트코드책
- git squash
- 가상면접으로대규모시스템
- react
- formik react-query submitting not working
- 리팩토링2판4장
- FirebaseAnalytics
- 시스템설계
- 헤드퍼스트전략패턴
- formik submitting not working
- cypress React
- git commit 협업
- cypressBDD
- s3이미지다운로드됨
- file not found Error
- gitsquash
- 리액트구글애널리틱스
- git commit merge
- 시스템설계면접
- 전략패턴
- 디자인패턴
- 가상면접2장
- Git commit 합치기
- 시스템설계면접팁
- awss3
- react-ga
- 시스템설계면접예시
- Today
- Total
mingg IT
[Java] Quartz 스케줄러 사용법 본문
http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/tutorial-lesson-06.html
내가 원하는 지정된 시간 즉 주기적으로 배치 프로그램을 만들때 사용하는 라이브러리이며 은행에서 매달 이용내역을 청구하듯이 분기별로 DB의 데이터를 동기화 하는데 사용한다.
이슈로 스케쥴러를 만들때 설정해놓은 시작시간과 다르게 스케줄러가 도는 부분을 수정하다가 해당 라이브러리를 공부해보기로 했다.
Quartz API 주요 인터페이스
- Scheduler - 스케줄러와 상호 작용하기 위한 기본 API입니다.
- Job - 스케줄러에 의해 실행되기를 원하는 구성 요소에 의해 구현될 인터페이스입니다.
- JobDetail - 작업의 인스턴스를 정의하는 데 사용됩니다.
- Trigger - 주어진 작업이 실행될 일정을 정의하는 구성 요소입니다.
- JobBuilder - 작업의 인스턴스를 정의하는 JobDetail 인스턴스를 정의/구축하는 데 사용됩니다.
- TriggerBuilder - Trigger 인스턴스를 정의/구축하는 데 사용됩니다.
1. 스케줄러 생성
JobDataMap을 이용하여 Job Detail을 만든다.
JobDataMap 내부에는
name : 스케줄러이름
groupName : 그룹 이름
description : 설명
seheduleInfo : 스케줄러에 대한 정보가 들어 있는 map (key - value) 로 이루어져있음
예를들어 (startTime - 2021.08.23 00:00:00) 이런식으로
withIdentity("myJob", "group1") // 스케줄러이름 myJob, 그룹 group1이라는 의미
private JobDetail buildSechduler(Class job, Integer name, String groupName, String description,
Map seheduleInfo) {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.putAll(seheduleInfo);
return JobBuilder.newJob(job).withIdentity(Integer.toString(name), groupName)
.withDescription(description).usingJobData(jobDataMap).build();
}
2.트리거를 선택함.
startTime : 2021.08.23 21:09:00
Hour : 10
Min : 30
매일 10: 30 분에 스케줄러가 수행된다.
HolidayCalendar cal = new HolidayCalendar();
cal.addExcludedDate( someDate );
cal.addExcludedDate( someOtherDate );
sched.addCalendar("myHolidays", cal, false);
.modifiedByCalendar("myHolidays")
를 사용하면 공휴일은 돌지않도록 할 수 있다. (org.quartz.impl.HolidayCalendar 클래스 사용)
private Trigger SimpleJobTrigger(String scheduleExp, Integer Hour, Integer Min) {
return TriggerBuilder.newTrigger().startAt(startTime).withSchedule(SimpleSchedule.withSchedule(dailyAtHourAndMinute(Hour, Min))
.build();
}
cron 을 사용한 스케줄러
startTime : 2021.08.23 21:09:00
sehcduleExp : 0 0/5 * * * ?
5분마다 작동한다.
스케줄러가 동작하는 시작 시간을 설정하고 싶을경우 startAt을 사용한다.
startAt을 사용해주지 않으면 처음 만들어진 순간부터 sehcduleExp 에맞게 스케줄러를 수행한다.
private Trigger CronJobTrigger(String scheduleExp, Timestamp startTime) {
return TriggerBuilder.newTrigger().startAt(startTime).withSchedule(CronScheduleBuilder.cronSchedule(scheduleExp))
.build();
}
'기타' 카테고리의 다른 글
[DataSet] EMP, DEPT, SALGRADE 기본 데이터셋 추가 (0) | 2021.09.06 |
---|---|
[BPMN] Camunda 분석 (0) | 2021.08.25 |
[SQL] CLOB, BLOB 데이터 예제 (0) | 2021.08.20 |
[기타] 네이버 쇼핑 API 오타 (0) | 2021.07.28 |
[MBTI]나는 어떤 벌레일까? 직장인 MBTI (0) | 2021.06.20 |