美文网首页
Quartz引入SpringBoot框架

Quartz引入SpringBoot框架

作者: 是我真的是我 | 来源:发表于2019-11-09 11:54 被阅读0次

    Quartz是一个完全由java编写的开源作业调度框架。

    引入jar包

    配置QuartzConfiguration.java

    package com.henu.oto.config.quartz;
    
    import com.henu.oto.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;
    
    @Configuration
    public class QuartzConfiguration {
        @Autowired
        private ProductSellDailyService productSellDailyService;
        @Autowired
        private MethodInvokingJobDetailFactoryBean jobDetailFactory;
        @Autowired
        private CronTriggerFactoryBean productSellDailyTriggerFactory;
    
        /**
         * 创建jobDetailFactory并返回
         * @return
         */
        @Bean(name = "jobDetailFactory")
        public MethodInvokingJobDetailFactoryBean createJobDetail(){
            // new出JobDetailFactory对象,此工厂主要用来制作一个jobDetail,即制作一个任务
            // 由于我们所做的定时任务根本上将其实就是执行一个方法,所以用这个工厂比较方便
            MethodInvokingJobDetailFactoryBean jobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();
            // 设置jobDetail的名字
            jobDetailFactoryBean.setName("product_sell_daily_job");
            // 设置jobDetail的组名
            jobDetailFactoryBean.setGroup("job_product_sell_daily_group");
            // 对于相同的jobDetail,当指定多个Trigger时,很可能第一个job完成之前,第二个job就开始了
            // 指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始
            jobDetailFactoryBean.setConcurrent(false);
            // 指定运行任务的类
            jobDetailFactoryBean.setTargetObject(productSellDailyService);
            // 指定运行任务的方法
            jobDetailFactoryBean.setTargetMethod("dailyCalculate");
            return jobDetailFactoryBean;
        }
    
        /**
         * 创建cronTriggerFactory并返回
         * @return
         */
        @Bean("productSellDailyTriggerFactory")
        public CronTriggerFactoryBean createProductSellDailyTrigger(){
            // 创建triggerFactory实例,用来创建trigger
            CronTriggerFactoryBean triggerFactory = new CronTriggerFactoryBean();
            // 设置triggerFactory的名字
            triggerFactory.setBeanName("product_sell_daily_trigger");
            // 设置triggerFactory的组名
            triggerFactory.setGroup("job_product_sell_daily_group");
            // 绑定jobDetail
            triggerFactory.setJobDetail(jobDetailFactory.getObject());
            // 设定cron表达式 http://qqe2.com/cron
            triggerFactory.setCronExpression("0/59 * * * * ?");
            return triggerFactory;
        }
    
        /**
         * 创建调度工厂并返回
         * @return
         */
        @Bean("schedulerFactory")
        public SchedulerFactoryBean createSchedulerFactory(){
            SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
            schedulerFactory.setTriggers(productSellDailyTriggerFactory.getObject());
            return schedulerFactory;
        }
    }
    

    编写要定时执行的业务代码
    ProductSellDailyService.java


    ProductSellDailyServiceImpl.java

    设置成功

    效果

    相关文章

      网友评论

          本文标题:Quartz引入SpringBoot框架

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