새소식

반응형
250x250
My Study/Java

Scheduler 만들 수 있는 Quartz 정리

  • -
728x90
반응형

다음에는 더 정확하게 이해를 하고 사용해보기

 

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에서 실행하면 된다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.