springboot整合quartz
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
@Configuration
public class QuartzConfiguration {
@Bean
public SchedulerFactoryBean schedulerFactoryBean(){
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setOverwriteExistingJobs(true);//覆盖已存在的任务
//schedulerFactoryBean.setStartupDelay(60);//延时60秒 用于开机就启动的定时任务
schedulerFactoryBean.setConfigLocation(new ClassPathResource("quartz.properties"));
return schedulerFactoryBean;
}
// 创建schedule
@Bean(name = "scheduler")
public Scheduler scheduler() {
Scheduler scheduler = schedulerFactoryBean().getScheduler();
return scheduler;
}
}
## 业务执行类
public class TaskJob extends QuartzJobBean {
@Autowired
private SynchService synchService;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
Integer runTaskId = Integer.valueOf(String.valueOf(context.getMergedJobDataMap().get("taskId")));//获取参数
System.out.println("开始同步数据任务!"+runTaskId);
}
}
## 开始定时任务
private void start(String taskId){
try {
//排查是否已经启动
JobKey jobKey = new JobKey("taskJob"+taskId);
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
if (jobDetail != null){
return;
}
//启动定时任务
JobDetail taskJob = JobBuilder
.newJob(TaskJob.class) //绑定job
.withIdentity("taskJob"+taskId) //绑定id
//.storeDurably() 持久化
.build();
// 传入参数,在 TaskJob中使用
taskJob.getJobDataMap().put("taskId", taskId);
//触发器
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?"); //5秒定时
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger"+taskId)
.startNow()
.withSchedule(scheduleBuilder)
.build();
scheduler.scheduleJob(taskJob,trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
## 结束定时任务
@RequestMapping(value = "e")
public CommonReturn end(){
String key = "taskJob123456";
JobKey jobKey = new JobKey(key);
try {
//通过id回去job实例
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
if (jobDetail == null){
return null;
}
scheduler.deleteJob(jobKey);
} catch (SchedulerException e) {
e.printStackTrace();
}
return CommonReturn.createSuccess();
}