SpringBoot定時任務Quartz
quartz是一個功能豐富的開源作業調度庫
-
添加pom依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
-
創建定時Job
- 通過普通JavaBean創建,添加@Component註解將之註冊到容器
/** * @author wsyjlly * @create 2019.07.17 - 14:40 **/ @Component public class ScheduleDemo2 { public void schedule(){ System.out.println("ScheduleDemo2.schedule..."); } }
- 通過繼承抽象類QuartzJobBean創建,該方式需要實現該類中的executeInternal方法,該方法在任務被調用時使用。
/**
* @author wsyjlly
* @create 2019.07.17 - 14:40
**/
public class ScheduleDemo3 extends QuartzJobBean {
private String name;
public void setName(String name){
this.name = name;
}
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext){
System.out.println("ScheduleDemo3.executeInternal..."+name);
}
}
-
創建Quartz配置類QuartzConfig對Job進行配置
/** * @author wsyjlly * @create 2019.07.17 - 14:47 **/ @Configuration public class QuartzConfig { @Bean MethodInvokingJobDetailFactoryBean jobDetail1(){ MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean(); bean.setTargetBeanName("scheduleDemo2"); bean.setTargetMethod("schedule"); return bean; } @Bean JobDetailFactoryBean jobDetail2(){ JobDetailFactoryBean bean = new JobDetailFactoryBean(); bean.setJobClass(ScheduleDemo3.class); JobDataMap jobDataMap = new JobDataMap(); jobDataMap.put("name","ysw"); bean.setJobDataMap(jobDataMap); bean.setDurability(true); return bean; } @Bean SimpleTriggerFactoryBean simpleTrigger(){ SimpleTriggerFactoryBean bean = new SimpleTriggerFactoryBean(); bean.setJobDetail(jobDetail1().getObject()); bean.setRepeatCount(3); bean.setStartDelay(1000); bean.setRepeatInterval(2000); return bean; } @Bean CronTriggerFactoryBean cronTrigger(){ CronTriggerFactoryBean bean = new CronTriggerFactoryBean(); bean.setJobDetail(jobDetail2().getObject()); bean.setCronExpression("* * * * * ?"); return bean; } @Bean SchedulerFactoryBean schedulerFactory(){ SchedulerFactoryBean bean = new SchedulerFactoryBean(); SimpleTrigger simpleTrigger = simpleTrigger().getObject(); CronTrigger cronTrigger = cronTrigger().getObject(); bean.setTriggers(simpleTrigger,cronTrigger); return bean; } }