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

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表达式生成器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值