SpringBoot 정시 작업 두 가지(Spring Schedule 및 Quartz 통합) 구현 방법
최근 프로젝트에서 정시 임무를 사용하기 전까지는 Quartz를 사용해 왔다. 최근 스프링의 기초를 보면 스프링이 스프링 스케줄을 제공하면 간단한 정시 작업 기능을 실현할 수 있다는 것을 발견했다.
다음은 Spring Boot 프로젝트에서 사용되는 두 가지 방법에 대해 설명합니다.
Spring Schedule 정시 작업 수행
Spring Schedule은 두 가지 방법으로 정시 작업을 수행합니다. 1.XML을 사용하여 정시 작업을 구성합니다. 2.@Scheduled 메모를 사용합니다.Spring Boot 프로젝트이기 때문에 XML 구성의 형식을 최대한 피할 수 있습니다. 주로 메모의 형식을 말합니다.
Spring Schedule은 다음과 같은 세 가지 유형의 정시 작업을 제공합니다.
고정 대기 시간 @Scheduled(fixedDelay = 시간 간격)
@Component
public class ScheduleJobs {
public final static long SECOND = 1 * 1000;
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
@Scheduled(fixedDelay = SECOND * 2)
public void fixedDelayJob() throws InterruptedException {
TimeUnit.SECONDS.sleep(2);
System.out.println("[FixedDelayJob Execute]"+fdf.format(new Date()));
}
}
고정 간격 @Scheduled(fixedRate = 시간 간격)
@Component
public class ScheduleJobs {
public final static long SECOND = 1 * 1000;
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
@Scheduled(fixedRate = SECOND * 4)
public void fixedRateJob() {
System.out.println("[FixedRateJob Execute]"+fdf.format(new Date()));
}
}
Corn 표현식 @Scheduled(cron = Corn 표현식)
@Component
public class ScheduleJobs {
public final static long SECOND = 1 * 1000;
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
@Scheduled(cron = "0/4 * * * * ?")
public void cronJob() {
System.out.println("[CronJob Execute]"+fdf.format(new Date()));
}
}
Spring Boot 통합 Quartz 정시 작업 수행aven 의존 추가
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
Spring Boot 통합 QuartzSpring 프로젝트 통합 Quartz는 주로 Scheduler Factory Bean이라는 Factory Bean을 추가하기 때문에maven 의존에spring-context-support를 추가합니다.
우선 QuartzConfig 클래스를 추가하여 관련 Bean을 설명합니다.
@Configuration
public class QuartzConfig {
@Autowired
private SpringJobFactory springJobFactory;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobFactory(springJobFactory);
return schedulerFactoryBean;
}
@Bean
public Scheduler scheduler() {
return schedulerFactoryBean().getScheduler();
}
}
여기에서 우리는 내가 사용자 정의 JobFactory를 주입한 후에 그것을 Scheduler Factory Bean의 JobFactory로 설정한 것을 주의해야 한다.그 목적은 내가 구체적인 Job에서 Spring에 서비스를 주입해야 하기 때문이다.따라서 구체적인job류가 실례화될 때Spring의 API를 사용하여 의존 주입을 할 수 있도록jobfactory를 사용자 정의해야 합니다.
SpringJobFactory 구현:
@Component
public class SpringJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
구체적인 사용(프로젝트 코드에서 따옴):
@Service
public class QuartzEventServiceImpl implements QuartzEventService {
private static final String JOB_GROUP = "event_job_group";
private static final String TRIGGER_GROUP = "event_trigger_group";
@Autowired
private Scheduler scheduler;
@Override
public void addQuartz(Event event) throws SchedulerException {
JSONObject eventData = JSONObject.parseObject(event.getEventData());
Date triggerDate = eventData.getDate("date");
JobDetail job = JobBuilder.newJob(EventJob.class).withIdentity(event.getId().toString(), JOB_GROUP).usingJobData(buildJobDateMap(event)).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(event.getId().toString(), TRIGGER_GROUP).startAt(triggerDate).build();
scheduler.scheduleJob(job, trigger);
}
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.