【Springboot】快速整合Quartz

一、引言

在java中最常用的定时任务框架当属quartz了,早在spring boot还未发布之前,spring就已经在spring-context-support包中对quartz进行了集成,而使用spring boot来整合quartz就变的尤为方便、快捷。

二、快速整合

2.1 pom引入starter依赖

spring boot最重要的就是它的插件化设计,想引入哪个模块或框架一般只需引入对应的starter即可,quartz也是一样,如下



    org.springframework.boot
    spring-boot-starter-quartz

(这里的spring-boot-starter-quartz没有写明version版本,默认与spring boot的版本一致即可)

在pom中点击spring-boot-starter-quartz进去可以看到其内部依赖spring-boot-starter、spring-context-support、spring-tx以及quartz,如下


  
    org.springframework.boot
    spring-boot-starter
    2.6.6
    compile
  
  
    org.springframework
    spring-context-support
    5.3.18
    compile
  
  
    org.springframework
    spring-tx
    5.3.18
    compile
  
  
    org.quartz-scheduler
    quartz
    2.3.2
    compile
  

2.2 定义任务类

自定义的任务类需要实现quartz提供的Job接口,样例如下

/**
 * 任务类
 */
public class MyJob1 implements Job {

    @Autowired
    private MyService1 myService1;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
//        System.out.println("任务创建人:" + jobDataMap.getString("createUser"));
        myService1.work();
    }
}

如上代码中,任务类中可以直接使用@Autowired来注入bean,这为我们编写任务类时提供了很好的便利,不需要通过任务参数jobDataMap来传入bean了。MyService1是一个简单的bean,代码如下

@Service
public class MyService1 {
    public void work() {
        String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(now + ": service1正在工作...");
    }
}

2.3 创建定时任务

下面通过定义一个ApplicationRunner,在spring容器启动后,执行run方法来简单地创建一个定时任务,代码如下

@Component
public class MyApplicationRunner implements ApplicationRunner {

    @Autowired
    private Scheduler scheduler;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 创建任务明细
        JobDetail jobDetail = JobBuilder.newJob(MyJob1.class)
                .withIdentity("myJob1", "job_group")
//                .usingJobData("createUser", "kamier")   // 可以放一些任务数据
                .build();

        // 创建触发器,每隔5秒执行一次
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger1", "trigger_group")
                .withSchedule(cronScheduleBuilder)
                .build();

        // 调度定时任务
        scheduler.scheduleJob(jobDetail, trigger);
    }
}

2.4 测试验证

启动spring boot工程后,控制台打印如下,说明定时任务调度成功

你可能感兴趣的:(【Springboot】快速整合Quartz)