Quartz 프레임워크를 사용한 첫 번째 프로그램

JavaBeginner
지금 연습하기

소개

이 프로젝트에서는 Quartz 프레임워크를 사용하여 사용자에게 기상, 양치질, 세수를 상기시키는 간단한 작업을 예약하고 실행하는 방법을 배우게 됩니다.

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • 실행해야 하는 작업을 정의하기 위해 RemindJob 클래스에서 Job 인터페이스를 구현하는 방법
  • Quartz Scheduler 를 사용하여 RemindJob을 예약하고 실행하기 위해 RemindScheduler 클래스를 구현하는 방법
  • RemindScheduler 클래스의 예약 기능을 확인하기 위한 테스트 함수를 작성하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • Quartz 프레임워크를 사용하여 작업을 예약하고 실행할 수 있습니다.
  • 작업에 대한 JobDetailTrigger 인스턴스를 생성하고 구성할 수 있습니다.
  • Quartz Scheduler 를 시작하고 종료할 수 있습니다.
  • 애플리케이션의 기능을 확인하기 위한 테스트 함수를 작성할 수 있습니다.

RemindJob 클래스 구현

이 단계에서는 Quartz 프레임워크의 Job 인터페이스를 구현하는 RemindJob 클래스를 구현하는 방법을 배우게 됩니다.

  1. /home/labex/project/QuartzRemind/src/main/java/org/labex 디렉토리에 있는 RemindJob.java 파일을 엽니다.

  2. org.quartz.Job 인터페이스의 execute() 메서드를 구현합니다. 이 메서드는 작업이 실행될 때 Quartz Scheduler 에 의해 호출됩니다.

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
    System.out.println("Wake up! Brush your teeth and wash your face!");
    System.out.println("Current system time - " + new Date());
}

execute() 메서드는 알림 메시지 "Wake up! Brush your teeth and wash your face!"와 현재 시스템 시간을 출력해야 합니다.

✨ 솔루션 확인 및 연습

RemindScheduler 클래스 구현

이 단계에서는 RemindJob을 예약하고 실행하는 RemindScheduler 클래스를 구현하는 방법을 배우게 됩니다.

  1. /home/labex/project/QuartzRemind/src/main/java/org/labex 디렉토리에 있는 RemindScheduler.java 파일을 엽니다.

  2. RemindJob에 대한 org.quartz.JobDetail 인스턴스를 생성하고 반환하는 getJobDetail() 메서드를 구현합니다.

public static JobDetail getJobDetail() {
    return JobBuilder.newJob(RemindJob.class)
            .withIdentity("reminderJob", "reminderGroup")
            .build();
}
  1. RemindJob에 대한 org.quartz.Trigger 인스턴스를 생성하고 반환하는 getTrigger() 메서드를 구현합니다. 트리거는 2 초마다 3 번 작업을 반복합니다.
public static Trigger getTrigger() {
    return TriggerBuilder.newTrigger()
            .withIdentity("reminderTrigger", "reminderGroup")
            .startNow()
            .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                    .withIntervalInSeconds(2)
                    .withRepeatCount(2))
            .build();
}
  1. org.quartz.Scheduler 인스턴스를 사용하여 RemindJob을 예약하고 실행하는 doScheduler() 메서드를 구현합니다.
public void doScheduler() throws SchedulerException, InterruptedException {
    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

    // Start the scheduler
    scheduler.start();

    System.out.println("Scheduling started");

    // Schedule the job with the defined JobDetail and Trigger
    scheduler.scheduleJob(getJobDetail(), getTrigger());

    // Sleep for 10 seconds
    Thread.sleep(10000);

    // Shutdown the scheduler
    scheduler.shutdown();

    System.out.println("Scheduling completed");
}

이 메서드는 스케줄러를 시작하고, JobDetailTrigger 인스턴스를 사용하여 작업을 예약하고, 10 초 동안 대기한 다음 스케줄러를 종료합니다.

✨ 솔루션 확인 및 연습

테스트 함수 작성

이 단계에서는 RemindScheduler 클래스의 스케줄링 기능을 검증하기 위한 테스트 함수를 작성하는 방법을 배우게 됩니다.

  1. /home/labex/project/QuartzRemind/src/test/java/org/labex 디렉토리에 있는 TestQuartz.java 파일을 엽니다.

  2. RemindScheduler의 인스턴스를 생성하고 doScheduler() 메서드를 호출하는 test() 메서드를 구현합니다.

@Test
public void test() {
    try {
        new RemindScheduler().doScheduler();
    } catch (InterruptedException | SchedulerException e) {
        e.printStackTrace();
    }
}

이 테스트 메서드는 스케줄링 기능을 실행하고 작업이 예상대로 실행되는지 확인합니다.

✨ 솔루션 확인 및 연습

테스트 실행

테스트를 실행하고 프로젝트를 검증하려면 다음 단계를 따르세요.

  1. 터미널을 열고 /home/labex/project/QuartzRemind 디렉토리로 이동합니다.

  2. 다음 명령을 실행하여 테스트를 실행합니다.

mvn test

다음과 같은 출력을 볼 수 있습니다.

Scheduling started
Wake up! Brush your teeth and wash your face!
Current system time - Fri Apr 26 06:54:03 CST 2024
Wake up! Brush your teeth and wash your face!
Current system time - Fri Apr 26 06:54:05 CST 2024
Wake up! Brush your teeth and wash your face!
Current system time - Fri Apr 26 06:54:07 CST 2024
Scheduling completed

이 출력은 RemindJobRemindScheduler 클래스에 의해 예약된 대로 세 번 실행되었음을 나타냅니다.

축하합니다! RemindJobRemindScheduler 클래스를 구현하고 스케줄링 기능을 검증하기 위한 테스트 함수를 작성하여 프로젝트를 성공적으로 완료했습니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.