quartz定时任务在SpringBoot中的使用
pom中的依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>2.4.5</version>
</dependency>
简单应用的定时任务
public class MyScheduler {
public static void main(String[] args) throws SchedulerException, ParseException {
JobDetailImpl jobDetail = new JobDetailImpl();
jobDetail.setName("job1");
jobDetail.setGroup("group1");
jobDetail.setJobClass(PrintWordsJob.class);
SimpleTriggerImpl simpleTrigger = new SimpleTriggerImpl();
simpleTrigger.setName("trigger1");
//指定Trigger的触发规则
simpleTrigger.setStartTime(new Date());//开始触发的时间
simpleTrigger.setRepeatInterval(2000);//每2秒钟触发一次
simpleTrigger.setRepeatCount(10);//共重复10次
CronTriggerImpl cronTrigger = new CronTriggerImpl();
cronTrigger.setName("CronTrigger-Test");
cronTrigger.setGroup("Test-CronTrigger");
//指定触发时间的规则:表示2016年1月30日9点08分触发,每3秒钟触发一次,持续一分钟
cronTrigger.setCronExpression("0/3 * * * * ? *");
/* SchedulerFactory schedulerFactory=new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail,simpleTrigger);
scheduler.start();*/
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
}
在SpringBoot中的使用
quartz配置类:
@Configuration
public class QuartzConfig {
@Bean
public JobDetail checkedJobDetail()
{
JobDetail jobDetail = JobBuilder.newJob(SystemCheckedJob.class)
.withIdentity("checkedJobDetail","CheckedJobDetail")
.storeDurably() //即使没有Trigger关联时,也不需要删除该JobDetail
.build();
return jobDetail;
}
@Bean
public Trigger checkedJobTrigger() {
//每小时执行一次
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 * * * ? ");
// CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/10 * * * * ? ");
//创建触发器
Trigger trigger = TriggerBuilder.newTrigger()
.forJob(checkedJobDetail())//关联上述的JobDetail
.withIdentity("checkedJobTrigger", "CheckedJobTrigger")//给Trigger起个名字
.withSchedule(cronScheduleBuilder)
.build();
return trigger;
}
}
job类
public class SystemCheckedJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 在此处实现具体执行的job任务,例如打印一句话
System.out.println(“定时任务执行”);
}
}
SpringBoot自带有定时任务,使用更简单,但没有Quartz灵活
在项目启动类上加:
@EnableScheduling 注解
@EnableScheduling
public class SctjApplication {
public static void main(String[] args) {
SpringApplication.run(SctjApplication.class, args);
}
}
写任务类开始执行
@Component
public class ScheduledTasks {
/**
* 每月1号到6号8点30分和23点30分自动备份
*/
@Scheduled(cron = "0 30 8,23 1,2,3,4,5,6 * ? ")
public void autoBackups() {
log.info("自动备份开始:");
backupsService.backupsAllTables();
log.info("自动备份完成");
}
}