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

     

  • 相关阅读:
    python学习笔记(7)
    python学习笔记(6)
    python学习笔记(5)
    python学习笔记(4)
    python学习笔记(3)
    python学习笔记(2)
    软件工程结对编程第二次作业
    软件工程结对编程第一次作业
    软件工程第三次作业
    答编辑问
  • 原文地址:https://www.cnblogs.com/devise/p/9974681.html
Copyright © 2020-2023  润新知