Akashic Records

Spring Batch+Quartz에서 Trigger 삭제하고 등록하기 본문

Spring.io

Spring Batch+Quartz에서 Trigger 삭제하고 등록하기

Andrew's Akashic Records 2023. 4. 6. 15:19
728x90

Quartz에서 등록된  trigger 삭제 하기
Spring Boot에서 Quartz 스케줄러를 사용하여 등록된 트리거를 삭제하는 방법을 보여드리겠습니다.

먼저, 스케줄러를 사용하려면 빈으로 등록된 스케줄러 인스턴스를 가져와야 합니다. 이를 위해 Scheduler 타입의 빈을 주입받아 사용합니다.

import org.quartz.Scheduler;
import org.quartz.TriggerKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class QuartzTriggerManager {

    @Autowired
    private Scheduler scheduler;

    public boolean deleteTrigger(String triggerName, String triggerGroup) {
        try {
            TriggerKey triggerKey = new TriggerKey(triggerName, triggerGroup);
            return scheduler.unscheduleJob(triggerKey);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

위의 예제에서 QuartzTriggerManager라는 클래스를 정의했습니다. 이 클래스에 Scheduler 빈을 주입받아 사용하고 있습니다. deleteTrigger 메서드는 트리거 이름과 트리거 그룹을 인자로 받아 해당 트리거를 삭제합니다. 삭제에 성공하면 true를 반환하고, 실패하면 false를 반환합니다.

이제 QuartzTriggerManager 클래스의 deleteTrigger 메서드를 사용하여 트리거를 삭제할 수 있습니다.

예를 들어, 다음과 같이 트리거를 삭제할 수 있습니다.

// ...
@Autowired
private QuartzTriggerManager quartzTriggerManager;

public void deleteSampleTrigger() {
    String triggerName = "sampleTrigger";
    String triggerGroup = "sampleGroup";

    boolean result = quartzTriggerManager.deleteTrigger(triggerName, triggerGroup);
    if (result) {
        System.out.println("Trigger deleted successfully.");
    } else {
        System.out.println("Failed to delete the trigger.");
    }
}
// ...

 

이렇게 하면 등록된 트리거를 삭제할 수 있습니다. 삭제 전 해당 트리거가 스케줄러에 등록되어 있는지 확인하고, 필요한 경우 추가 작업을 수행하십시오.


스케줄러에 trigger 등록하기

Spring Boot에서 Quartz 스케줄러를 사용하여 트리거를 등록하는 방법을 보여드리겠습니다. 아래 코드는 간단한 Quartz Job과 트리거를 등록하는 예제입니다.

먼저 Quartz Job을 정의해주세요.

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class SampleJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Executing SampleJob...");
    }
}


스케줄러에 Job과 트리거를 등록하는 클래스를 작성합니다.

import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class QuartzSchedulerManager {

    @Autowired
    private Scheduler scheduler;

    public void scheduleSampleJob() {
        try {
            // Job 생성
            JobDetail jobDetail = JobBuilder.newJob(SampleJob.class)
                    .withIdentity("sampleJob", "sampleGroup")
                    .build();

            // 트리거 생성 (10초마다 실행)
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("sampleTrigger", "sampleGroup")
                    .startNow()
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                            .withIntervalInSeconds(10)
                            .repeatForever())
                    .build();

            // 스케줄러에 Job과 트리거 추가
            scheduler.scheduleJob(jobDetail, trigger);

        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}


위의 예제에서 QuartzSchedulerManager라는 클래스를 정의했습니다. 이 클래스에 Scheduler 빈을 주입받아 사용하고 있습니다. scheduleSampleJob 메서드는 SampleJob 클래스의 인스턴스를 생성하고, 10초마다 실행되는 트리거를 만들어 스케줄러에 추가합니다.

이제 QuartzSchedulerManager 클래스의 scheduleSampleJob 메서드를 호출하여 트리거를 등록할 수 있습니다.
예를 들어, 다음과 같이 트리거를 등록할 수 있습니다.

// ...
@Autowired
private QuartzSchedulerManager quartzSchedulerManager;

public void addSampleTrigger() {
    quartzSchedulerManager.scheduleSampleJob();
}
// ...


이렇게 하면 스케줄러에 트리거가 등록되고, 등록된 트리거에 따라 Job이 실행됩니다. 다양한 스케줄링 옵션을 사용하려면 Cron 표현식을 사용하여 트리거를 생성하십시오.

 
728x90
Comments