...
코드 블럭 |
---|
language | xml |
---|
title | pom.xml |
---|
linenumbers | true |
---|
|
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency> |
Qurtz의 Quartz의 환경설정 파일을 작성합니다. 다음의 예제에서는 RAM Job Store를 사용하였으나 Quartz Job이 영속적으로 동작하기 위해서는 JDBC Job Store를 사용할 수 있으며 이 경우 다음을 수정해야 합니다.
코드 블럭 |
---|
language | text |
---|
title | src/main/resources/quartz.properties |
---|
linenumbers | true |
---|
|
# thread-pool
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=80
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
# job-store
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
# others
org.quartz.jobStore.misfireThreshold = 60000 |
...
코드 블럭 |
---|
language | java |
---|
linenumbers | true |
---|
|
import io.datadynamics.projects.migrator.jobs.MigrationJob;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobDetail;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
@Configuration
@Slf4j
public class QuartzConfiguration {
@Autowired
ApplicationContext applicationContext;
@Bean
public SchedulerFactoryBean scheduler(Trigger trigger, JobDetail job) {
SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
schedulerFactory.setConfigLocation(new ClassPathResource("quartz.properties"));
schedulerFactory.setJobFactory(springBeanJobFactory());
schedulerFactory.setJobDetails(job);
schedulerFactory.setTriggers(trigger);
return schedulerFactory;
}
@Bean
public SpringBeanJobFactory springBeanJobFactory() {
AutoWiringSpringBeanJobFactory jobFactory = new AutoWiringSpringBeanJobFactory();
jobFactory.setApplicationContext(applicationContext);
return jobFactory;
}
@Bean
public JobDetailFactoryBean jobDetail() {
JobDetailFactoryBean jobDetailFactory = new JobDetailFactoryBean();
jobDetailFactory.setJobClass(MigrationJob.class);
jobDetailFactory.setName("Migration Job");
jobDetailFactory.setDescription("Invoke Migration Job service...");
jobDetailFactory.setDurability(true);
return jobDetailFactory;
}
@Bean
public SimpleTriggerFactoryBean trigger(JobDetail job) {
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
trigger.setJobDetail(job);
int frequencyInSec = 1;
log.info("Configuring trigger to fire every {} seconds", frequencyInSec);
trigger.setRepeatInterval(frequencyInSec * 6000);
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
trigger.setName("Mail Sending Trigger");
return trigger;
}
} |
Spring Scheduling에 대해서 상세하게 알고 싶은 경우 https://www.baeldung.com/spring-quartz-schedule 을 참고하십시오.