美文网首页程序员
springboot整合Quartz(单一任务)

springboot整合Quartz(单一任务)

作者: 雪碧君 | 来源:发表于2018-09-17 15:37 被阅读0次

本文主旨在于能定时任务能运行起来,对于背后原理尚未深入探讨,所以若提及原理相关,多是揣摩估计,并未考究,仅供参考

一、单个定时任务时

1. pom.xml

在springboot基础上加上以下依赖:

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
</dependency>

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.1</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>

2. 添加任务类

/**
 * 一个任务
 *
 * @author Sprite
 * @date 2018/09/06
 */
@Component
public class SingleTask {

    public void singleTask(){
        System.out.println("执行单个定时任务");
    }
}

看到有文章说,必须要有@EnableScheduling和@Configuration贴在任务类上面,但是亲测发现去掉亦可. 大概是因为@EnableScheduling其实是springboot本身对于定时功能的支持的自动装配,与Quartz无关,后面配置已经将该任务类加上,故这里不加这个注解也可以

3.配置类

package com.xuebi.qrtz_demo.config;
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;

/**
 * 配置
 *
 * @author Sprite
 * @date 2018/09/06
 */
@Configuration
public class QuartzConfig {

    @Bean
    public MethodInvokingJobDetailFactoryBean detailFactoryBean(SingleTask task) {
        MethodInvokingJobDetailFactoryBean jobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();
        jobDetailFactoryBean.setConcurrent(false);
        jobDetailFactoryBean.setName("printOut");
        jobDetailFactoryBean.setGroup("printOut_group");
        jobDetailFactoryBean.setTargetObject(task);
        jobDetailFactoryBean.setTargetMethod("singleTask");
        return jobDetailFactoryBean;
    }

    @Bean
    public CronTriggerFactoryBean cronTrigger(MethodInvokingJobDetailFactoryBean detailFactoryBean) {
        CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean();
        triggerFactoryBean.setJobDetail(detailFactoryBean.getObject());
        // 设置表达式,每3秒执行一次
        triggerFactoryBean.setCronExpression("0/3 * * * * ?");
        triggerFactoryBean.setName("everyThreeSeconds");
        return triggerFactoryBean;
    }

    @Bean
    public SchedulerFactoryBean schedulerFactory(CronTriggerFactoryBean cronTrigger) {
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        // 设置是否任意一个已定义的Job会覆盖现在的Job。默认为false,即已定义的Job不会覆盖现有的Job。
        bean.setOverwriteExistingJobs(true);
        // 延时启动,应用启动10秒后,定时器才开始启动
        bean.setStartupDelay(10);
        // 注册定时触发器
        bean.setTriggers(cronTrigger.getObject());
        return bean;
    }
}

控制台输出结果

控制台结果

看到控制台的这个结果,就表示已经成功了

相关文章

网友评论

    本文标题:springboot整合Quartz(单一任务)

    本文链接:https://www.haomeiwen.com/subject/ltdxgftx.html