zoukankan      html  css  js  c++  java
  • spring项目如何使用quartz执行多个定时任务

    依赖

    <!--   定时器   -->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
         </dependency>

    配置文件

    package com.sundear.demo;

    import com.sundear.Timing.*;
    import org.quartz.JobDetail;
     
    @Configuration
    public class QuartzConfiguration {

        // 配置定时任务1
        @Bean(name = "firstJobDetail")
        public MethodInvokingJobDetailFactoryBean firstJobDetail(TimingByDay timingByDay) {
            MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
            // 是否并发执行
            jobDetail.setConcurrent(true);
            // 为需要执行的实体类对应的对象
            jobDetail.setTargetObject(timingByDay);
            // 需要执行的方法
            jobDetail.setTargetMethod("task");
            return jobDetail;
        }

        // 配置触发器1
        @Bean(name = "firstTrigger")
        public CronTriggerFactoryBean firstTrigger(JobDetail firstJobDetail) {
            CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
          trigger.setJobDetail(firstJobDetail);
          // 设置定时时间
            trigger.setCronExpression("0 46 15 * * ? 2020");
            return trigger;
        }

        // 配置定时任务2
        @Bean(name = "secondJobDetail")
        public MethodInvokingJobDetailFactoryBean secondJobDetail(TimingByWeek timingByWeek) {
            MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
            // 是否并发执行
            jobDetail.setConcurrent(true);
            // 为需要执行的实体类对应的对象
            jobDetail.setTargetObject(timingByWeek);
            // 需要执行的方法
            jobDetail.setTargetMethod("task");
            return jobDetail;
        }

        // 配置触发器2
        @Bean(name = "secondTrigger")
        public CronTriggerFactoryBean secondTrigger(JobDetail secondJobDetail) {
            CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
            trigger.setJobDetail(secondJobDetail);
            trigger.setCronExpression("0 24 19 * * ? 2020");
            return trigger;
        }

        // 配置Scheduler
        @Bean(name = "scheduler")
        public SchedulerFactoryBean schedulerFactory
        (Trigger firstTrigger, Trigger secondTrigger,Trigger thirdTrigger,
         Trigger forthTrigger,Trigger fifthTrigger) {
            SchedulerFactoryBean bean = new SchedulerFactoryBean();
            // 延时启动,应用启动5秒后
            bean.setStartupDelay(5);
            // 注册触发器
            bean.setTriggers(firstTrigger,secondTrigger,thirdTrigger);
            return bean;
        }
    }

    把定时任务绑定在对应的代码上

    @Component
    @EnableScheduling

    public class TimingByDay {

    //要定时执行的代码

    }

    @Component
    @EnableScheduling

    public class TimingByWeek {

    //要定时执行的代码

    }

    springboot项目启动类需要加上 @EnableScheduling,启动定时任务

  • 相关阅读:
    关于react框架的一些细节问题的思考
    shouldComponentUpdate不能直接比较object
    浅谈session,cookie,sessionStorage,localStorage的区别及应用场景
    dva相关文档
    vuex 源码:深入 vuex 之辅助函数 mapState
    第三课补充01——set类型 sorted类型命令操作详解,redis管道及事务
    第三课作业——set类型、sorted set类型的增删改查,redis的事务
    第二课补充01——redis-cli命令行详解、string类型、list类型、hash类型命令操作详解
    第二课作业——redis常用命令
    第五课——备份恢复
  • 原文地址:https://www.cnblogs.com/yxj808/p/13372775.html
Copyright © 2011-2022 走看看