[java] Quartz Scheduler에서 작업 간의 상태 공유하기

Quartz Scheduler는 Java 애플리케이션에서 스케줄링된 작업을 실행할 수 있는 강력한 프레임워크입니다. 여러 작업이 동시에 실행되거나 상태를 공유해야하는 경우가 있을 수 있습니다. 이러한 상황에서 Quartz Scheduler의 JobDataMap을 사용하여 작업 간의 상태를 공유할 수 있습니다.

JobDataMap

Quartz Scheduler의 JobDataMap은 각 작업에 대한 데이터를 저장하는 데 사용됩니다. JobDataMap은 key-value 쌍으로 구성되며, 작업 클래스에서 사용할 수 있는 데이터를 제공합니다. 작업 간의 상태를 공유하기 위해 JobDataMap을 사용할 수 있습니다.

예를 들어, 두 개의 작업이 있고 첫 번째 작업이 생성한 데이터를 두 번째 작업이 사용해야하는 경우 JobDataMap을 사용하여 데이터를 전달하고 공유할 수 있습니다.

import org.quartz.*;

public class FirstJob implements Job {
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 작업 실행 후 데이터 생성
        String data = "Shared Data";
        
        // JobDataMap에 데이터 저장
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        dataMap.put("sharedData", data);
        
        // 다음 작업 예약
        JobKey secondJobKey = new JobKey("SecondJob");
        JobDetail secondJob = JobBuilder.newJob(SecondJob.class).withIdentity(secondJobKey).build();
        
        // 두 번째 작업의 JobDataMap에 데이터 전달
        secondJob.getJobDataMap().put("sharedData", dataMap.get("sharedData"));
        
        Trigger trigger = TriggerBuilder.newTrigger().startNow().build();
        
        try {
            context.getScheduler().scheduleJob(secondJob, trigger);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

public class SecondJob implements Job {
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // JobDataMap에서 데이터 가져오기
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        String sharedData = dataMap.getString("sharedData");
        
        // 데이터 사용
        System.out.println("Shared Data: " + sharedData);
    }
}

위의 예제에서 첫 번째 작업은 “Shared Data”를 생성하고 JobDataMap에 저장합니다. 다음으로 두 번째 작업을 예약하고 첫 번째 작업에서 생성한 데이터를 JobDataMap을 통해 전달합니다. 두 번째 작업에서는 JobDataMap에서 데이터를 가져와서 사용합니다.

이와 같이 Quartz Scheduler를 사용하면 여러 작업 간에 데이터를 공유할 수 있습니다. JobDataMap을 통해 데이터를 전달하고 이를 활용하여 작업 간에 상태를 공유할 수 있습니다.

결론

Quartz Scheduler에서 작업 간에 상태를 공유해야하는 경우 JobDataMap을 활용할 수 있습니다. 이를 통해 작업 클래스 간에 데이터를 전달하고 공유할 수 있으며, 여러 작업 간의 상태 공유를 쉽게 구현할 수 있습니다.