SpringBoot整合Quartz执行定时任务

依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

job

Job 表示要执行的代码,有2种方式:

  • 普通bean,不能传递参数
  • 继承 QuartzJobBean ,可以传递参数
public class TestQuartz extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("test");

    }
}

配置类

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail sampleJobDetail() {

        return JobBuilder.newJob(TestQuartz.class).storeDurably().build();
    }

    @Bean
    public Trigger sampleJobTrigger(){
        // 每隔3秒执行一次
        SimpleScheduleBuilder scheduleBuilder =
                SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(6).repeatForever();
        return TriggerBuilder.newTrigger().forJob(sampleJobDetail()).withSchedule(scheduleBuilder).build();
    }

}

JobDetail

JobDetail 的配置有两种方式:

  • MethodInvokingJobDetailFactoryBean。可以配置目标 Bean 的名字和目标方法的名字,这种方式不支持传参。
  • JobDetailFactoryBean 。任务类继承自 QuartzJobBean ,这种方式支持传参,将参数封装在 JobDataMap 中进行传递。

Trigger

触发器,Quartz 中定义了多个触发器,常用:

  • SimpleTrigger 设置简单定时
  • CronTrigger 通过 cron 表达式设置定时

原文出处:/show_1IXPXwji0Db.html