配置触发器工厂
package com.quartz.quartzdemo.conf;
import com.quartz.quartzdemo.quartz.RefreshTrbase;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
@Configuration
public class QuartzConfig {
// 配置Scheduler
@Bean(name = "scheduler")
public SchedulerFactoryBean schedulerFactory() {
SchedulerFactoryBean bean = new SchedulerFactoryBean();
// 延时启动,应用启动1秒后
bean.setStartupDelay(1);
// 注册触发器
//bean.setTriggers(firstTrigger, secondTrigger);
return bean;
}
}
添加执行 job
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class RefreshTrbase2 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("执行....");
}
}
启动任务
@Component
@Slf4j
public class ApplicationRunnerImpl implements ApplicationRunner {
@Autowired
private SchedulerFactoryBean scheduler;
@Autowired
private RefreshTrbase2 refreshTrbase2;
//启动服务执行方法
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("通过实现ApplicationRunner接口,在spring boot项目启动后打印参数");
System.out.println();
scheduleAddCronTrigger();
}
public void scheduleAddCronTrigger() throws SchedulerException, ParseException {
//构建job信息
JobDetail jobDetail = JobBuilder.newJob(refreshTrbase2.getClass()).withIdentity("jobName", "jobGroup").build();
//表达式调度构建器(即任务执行的时间)
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("* * * * * ?");
//SimpleScheduleBuilder是简单调用触发器,它只能指定触发的间隔时间和执行次数;
SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder
.simpleSchedule()//创建一个SimpleScheduleBuilder
.withIntervalInSeconds(0)//指定一个重复间隔,以毫秒为单位。
.withRepeatCount(0)//指定反复的次数
;
Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2019-09-20 16:56:00");
//按新的cronExpression表达式构建一个新的trigger
SimpleTrigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("jobName", "jobGroup")
.withSchedule(simpleScheduleBuilder)
.startAt(startDate)//启动时间
.build();
scheduler.getScheduler().scheduleJob(jobDetail,trigger);
log.info("定时任务添加完成");
}
}