在springboot项目中引入quartz任务调度器。

原创 2018年04月15日 17:30:19

quartz是一个非常强大的任务调度器。我们可能使用它来管理我们的项目,常见的是做业绩统计等等。当然它的功能远不止这些。我们在这里不介绍quartz的原理,下面讲讲如何在springboot中使用quartz。

废话不多说,直接上源码:

   首先看一下我们需要利用quartz执行的类和方法

  

productSellDailyService接口:

/**
 * 统计日销量的业务逻辑层
 */
public interface ProductSellDailyService {
    //每日定时对店铺的销量进行统计
    void dailyCalculate();
}

对应的实现类:

import net.cqwu.collegeo2o.dao.ProductSellDailyMapper;
import net.cqwu.collegeo2o.service.ProductSellDailyService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
public class ProductSellDailyServiceImpl implements ProductSellDailyService {

    private static final Logger log = LoggerFactory.getLogger(ProductSellDailyServiceImpl.class);

    @Autowired
    private ProductSellDailyMapper productSellDailyMapper;

    /**
     * 调用quartz每日定时对店铺的商品销量进行统计
     */
    @Override
    public void dailyCalculate() {
        log.info("Quartz is running!!");
        //调用持久层的方法,每天对店铺的销量进行统计,插入数据库中。
        productSellDailyMapper.insertProductSellDaily();
    }
}

    

下面是quartz的配置:

import net.cqwu.collegeo2o.service.ProductSellDailyService;
import org.springframework.beans.factory.annotation.Autowired;
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;

/**
 * 引入quartz (时间调度),按照我们规定的时间执行指定的任务
 *
 */
@Configuration
public class QuartzConfiguration {
    @Autowired
    private ProductSellDailyService productSellDailyService;
    @Autowired
    private MethodInvokingJobDetailFactoryBean jobDetailFactory;
    @Autowired
    private CronTriggerFactoryBean productSellDailyFactory;
    /**
     *  quartz三部曲的第一部,创建jobdetail对象(jobdetail与我们需要执行的事件进行绑定)
     * @return
     */
    @Bean(name = "jobDetailFactory")
    public MethodInvokingJobDetailFactoryBean createJobDetail(){
        //new出jobDetailFactoryBean对象,此工厂主要用来执着一个jobdetail对象,即制作一个任务,
        //由于我们所做的任务其本质就是定时执行一个方法,所以用本工厂比较方便
        MethodInvokingJobDetailFactoryBean jobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();
        //设置jobDetail的名字
        jobDetailFactoryBean.setName("product_sell_daily_job");
        //设置jobDetail的组
        jobDetailFactoryBean.setGroup("product_sell_daily_group");
        //对于同一个jobDetail,如果被多个触发器绑定了,那么很有很可能第一个job没执行完成,第二个job就开始了
        //设置Concurrent为false可以避免这种情况,即在第一个job未完成之前第二个job不会开始。
        jobDetailFactoryBean.setConcurrent(false);
        //绑定运行任务的类,这里比较关键,我们需要执行的任务都在该类中
        jobDetailFactoryBean.setTargetObject(productSellDailyService);
        //绑定运行任务类中的方法
        jobDetailFactoryBean.setTargetMethod("dailyCalculate");
        return jobDetailFactoryBean;
    }

    /**
     * quartz三部曲中的第二部,创建触发器,并配置触发器。在触发器中绑定jobDetail
     * @return
     */
    @Bean(name = "productSellDailyFactory")
    public CronTriggerFactoryBean createProductSellDailyTrigger(){
        CronTriggerFactoryBean triggerFactory = new CronTriggerFactoryBean();
        //设置触发器的名字
        triggerFactory.setName("product_sell_daily_trigger");
        //设置触发器的组
        triggerFactory.setGroup("product_sell_daily_group");
        //绑定jobDetail
        triggerFactory.setJobDetail(jobDetailFactory.getObject());
        //设置一些自定义参数
//        triggerFactory.setJobDataMap();
        //设置cron表达式(也可以使用simpltrigger)。即任务执行的时间。
        triggerFactory.setCronExpression("0 0 0 * * ? *"); //每天的00:00:00执行任务
        return triggerFactory;
    }

    /**
     * 第三部,创建调度工厂,让调度工厂绑定触发器
     * @return
     */
    @Bean(name="schedulerFactory")
    public SchedulerFactoryBean createScheduleFactoryBean(){
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        //绑定触发器
        schedulerFactoryBean.setTriggers(productSellDailyFactory.getObject());
        return schedulerFactoryBean;
    }
}

以上就已经配置好了quartz。主要还是核心的三步,第一步:创建jobDetail并绑定需要利用quartz执行的任务、第二步、创建trigger触发器,并绑定jobDetail.第三步、创建schedule并绑定触发器。

这样我们在启动项目的时候,quartz就已经被启动了。然后他会自动在我们规定的时间执行我们规定的业务。当然如果大家对cron表达式不太熟悉可以在百度搜索 cron表达式生成器。

用 C++ 实现 C# 中的 委托/事件 (3-functor0)

前两天看程序员杂志看到关于 C# 中的委托/事件觉得用起来好像是挺方便的本人热衷于 C++想想用 C++ 来模拟似乎也可以于是就有了下面的代码...(VC6 不支持偏特化 本人工作环境就是 VC6 痛...
  • coolcch
  • coolcch
  • 2004-03-21 17:41:00
  • 578

Spring中Quartz任务调度器不能识别注解的问题

转载:http://www.iteye.com/problems/94705不知有没有什么好的解决方案参考: http://blog.csdn.net/jackylovesjava/article/...
  • lovelovelovelovelo
  • lovelovelovelovelo
  • 2017-04-11 12:18:22
  • 625

Quartz在项目中使用方法

quartz介绍和下载:官网:http://www.quartz-scheduler.org/Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J...
  • a623982022
  • a623982022
  • 2018-02-03 09:45:58
  • 126

java项目中定时任务之Quartz的应用

Quartz 是个开放源码项目,提供了丰富的作业调度集。我目前接触到的quartz只是在我做的java项目中定时执行任务,我的项目因为是在spring的基础上搭建的想要整合quartz非常的简单。 对...
  • zczzsq
  • zczzsq
  • 2013-12-27 11:13:36
  • 4295

Quartz的搭建和在Web中的使用

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,...
  • zbw18297786698
  • zbw18297786698
  • 2017-06-17 19:24:37
  • 1658

quartz定时任务,在web项目中的使用方法

  • 2014年08月15日 15:52
  • 461KB
  • 下载

Quartz在真实项目中的使用(结合Spring框架)

需求:在某个时间做某件事,任务是动态的,到点就要执行 在spring的配置文件中加入如下配置 org.quartz.impl.jdb...
  • AngelMyMei
  • AngelMyMei
  • 2013-12-13 13:52:52
  • 2339

调度器Quartz的简述与使用总结

Quartz是一款性能强大的定时任务调度器。开发人员可以使用Quartz让任务在特定时间特定阶段进行运行。比如对特定类型新闻或股指期货指数等内容的爬取,可以编写爬虫程序然后使用Quartz在后台指定特...
  • newCheng
  • newCheng
  • 2017-07-27 20:29:47
  • 695

在ssm项目中引入shiro

概述:Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。 1.在pom.xml文件加入...
  • LJJ1338
  • LJJ1338
  • 2017-07-20 21:09:13
  • 335

使用Quartz实现项目中的任务调度

360图书馆 - Quartz任务调度   网上搜集加自己总结,闲话少说:   使用Quartz实现项目中的任务调度的基本步骤: 1、创建jobDetail作业任务 2、创建任务触发器 ...
  • cbjcry
  • cbjcry
  • 2017-04-13 10:20:40
  • 208
收藏助手
不良信息举报
您举报文章:在springboot项目中引入quartz任务调度器。
举报原因:
原因补充:

(最多只允许输入30个字)