springboot整合quartz配置多工
阿新 • • 發佈:2018-12-25
看了另外一個篇在springboot中使用java類配置quartz的部落格, 但是沒有多工的配置。 在這裡寫一個配置quartz多工的demo, 使用兩個任務, 使用SimpleTrigger和CronTrigger兩種觸發器, 最後一起註冊到Scheduler中
關於quartz 定時方面的配置請另外百度。
- maven依賴
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId >
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 任務類1
package top.kylewang.bos.quartz;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;
@Component
@EnableScheduling
public class FirstJob{
public void task(){
System.out.println("任務1執行....");
}
}
- 任務類2
package top.kylewang.bos.quartz;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;
@Component
@EnableScheduling
public class SecondJob{
public void task(){
System.out.println("任務2執行....");
}
}
- 使用java配置 (無需額外的yml或properties配置)
package top.kylewang.quartz;
import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
import org.springframework.scheduling.quartz.CornTriggerFactoryBean;
import top.kylewang.bos.quartz.FirstJob ;
import top.kylewang.bos.quartz.SecondJob;
@Configuration
public class QuartzConfiguration {
// 配置定時任務1
@Bean(name = "firstJobDetail")
public MethodInvokingJobDetailFactoryBean firstJobDetail(FirstJob firstJob) {
MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
// 是否併發執行
jobDetail.setConcurrent(false);
// 為需要執行的實體類對應的物件
jobDetail.setTargetObject(firstJob);
// 需要執行的方法
jobDetail.setTargetMethod("task");
return jobDetail;
}
// 配置觸發器1
@Bean(name = "firstTrigger")
public SimpleTriggerFactoryBean firstTrigger(JobDetail firstJobDetail) {
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
trigger.setJobDetail(firstJobDetail);
// 設定任務啟動延遲
trigger.setStartDelay(0);
// 每5秒執行一次
trigger.setRepeatInterval(5000);
return trigger;
}
// 配置定時任務2
@Bean(name = "secondJobDetail")
public MethodInvokingJobDetailFactoryBean secondJobDetail(SecondJob secondJob) {
MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
// 是否併發執行
jobDetail.setConcurrent(false);
// 為需要執行的實體類對應的物件
jobDetail.setTargetObject(secondJob);
// 需要執行的方法
jobDetail.setTargetMethod("task");
return jobDetail;
}
// 配置觸發器2
@Bean(name = "secondTrigger")
public CronTriggerFactoryBean secondTrigger(JobDetail secondJobDetail) {
CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
trigger.setJobDetail(secondJobDetail.getObject());
// cron表示式
trigger.setCronExpression("0 30 20 * * ?");
return trigger;
}
// 配置Scheduler
@Bean(name = "scheduler")
public SchedulerFactoryBean schedulerFactory(Trigger firstTrigger, Trigger secondTrigger) {
SchedulerFactoryBean bean = new SchedulerFactoryBean();
// 延時啟動,應用啟動1秒後
bean.setStartupDelay(1);
// 註冊觸發器
bean.setTriggers(firstTrigger,secondTrigger);
return bean;
}
}