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,启动定时任务

  • 相关阅读:
    C# Thread Lambda
    C#中Invoke的用法
    C#抽象类和抽象方法
    SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用
    改变自己的128种方法
    小技巧
    Linux学习第一章作业.zxs
    Linux学习第二、三章作业.zxs
    Linux 系统管理 04—账号管理
    Mysql中的in和find_in_set的区别?
  • 原文地址:https://www.cnblogs.com/yxj808/p/13372775.html
Copyright © 2011-2022 走看看