다음에는 더 정확하게 이해를 하고 사용해보기
Quartz는 Job Scheduling 라이브러리로 어느 자바 프로그램에서도 쉽게 통합하여 개발할 수 있다.
Quarzt 사용하기
1. Pom.xml에 Quartz dependency 추가
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
2. Trigger와 Job을 Bean 등록을 한다.
@Configuration
public class ConfigureJob {
@Bean
@Conditional(QuartzCondition.class)
public JobDetail jobADetails() {
return JobBuilder.newJob(ExecuteJob.class)
.withIdentity("Job")
.storeDurably().build();
}
@Bean
@Conditional(QuartzCondition.class)
public Trigger jobATrigger(JobDetail jobDetail) {
return TriggerBuilder.newTrigger()
.forJob(jobDetail)
.withIdentity("Trigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0/30 * * ? * * *"))
.build();
}
}
여기서 cron 표현식은
초, 분, 시, 일, 월, 요일, 연도 순으로 지금 설정해 준 시간은 30초마다 매번 실행해준다는 의미이다.
또한 QuartzCondition이라는 class를 만들어 검증을 통해 스케줄러를 실행, 미실행을 선택할 수 있게 하였다.
3. 실행할 Job을 정의해준다.
@Slf4j
@RequiredArgsConstructor
public class ExecuteJob implements Job {
private final TestService testService;
private final RequestService requestService;
private final ExecutorService executorService = Executors.newFixedThreadPool(10);
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
try {
log.info("Job started on instance: " + jobExecutionContext.getScheduler().getSchedulerInstanceId());
String triggerName = jobExecutionContext.getTrigger().getKey().getName();
log.info("Trigger Name: " + triggerName);
for (int i = 0; i < 1; i++) {
executorService.submit(requestService::restApiExecutor);
}
} catch (SchedulerException e) {
throw new RuntimeException(e);
}
}
}
이렇게 해준뒤 실행할 로직을 ExecuteJob에서 실행하면 된다.