定时任务执行框架quartz之时间配置参考以及Demo

Quartz 定时器的时间设置(参考网络资源,找不到原博主了,还是很感谢)

基本按照这种格式配置:<value>0 26 16 * * ?</value> 

时间大小由小到大排列,分别为 秒、分、时、天、月、年 ,   * 表示任意 ,? 表示无限制。

具体时间设定可参考

"0/10 * * * * ?" 每10秒触发

"0 0 12 * * ?" 每天中午12点触发 

"0 15 10 ? * *" 每天上午10:15触发 

"0 15 10 * * ?" 每天上午10:15触发 

"0 15 10 * * ? *" 每天上午10:15触发 

"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 

"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 

"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 

"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 

"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 

"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 

"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 

"0 15 10 15 * ?" 每月15日上午10:15触发 

"0 15 10 L * ?" 每月最后一日的上午10:15触发 

"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 

"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 

"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

"0 0 06,18 * * ?"  在每天上午6点和下午6点触发 

"0 30 5 * * ? *"   在每天上午5:30触发

"0 0/3 * * * ?"    每3分钟触发

demo如下:

quartzmaven依赖(SpringBoot的依赖没有写)

<!-- 定时执行框架 -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>

定时的相关配置:定时执行ScheduleTask类的uploadTask()方法,在这个方法里实现定时任务

package com.filereport.timer;


import org.quartz.Trigger;
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 QuartzConfigration {

    @Bean(name = "jobDetail")
    public MethodInvokingJobDetailFactoryBean detailFactoryBean(ScheduleTask task) {
        // ScheduleTask为需要执行的任务
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        /*
         *  是否并发执行
         *  例如每5s执行一次任务,但是当前任务还没有执行完,就已经过了5s了,
         *  如果此处为true,则下一个任务会bing执行,如果此处为false,则下一个任务会等待上一个任务执行完后,再开始执行
         */
        jobDetail.setConcurrent(true);

        jobDetail.setName("scheduler");// 设置任务的名字
        jobDetail.setGroup("scheduler_group");// 设置任务的分组,这些属性都可以存储在数据库中,在多任务的时候使用

        /*
         * 这两行代码表示执行task对象中的uploadTask方法。定时执行的逻辑都在uploadTask。
         */
        jobDetail.setTargetObject(task);

        jobDetail.setTargetMethod("uploadTask");
        return jobDetail;
    }

    @Bean(name = "jobTrigger")
    public CronTriggerFactoryBean cronJobTrigger(MethodInvokingJobDetailFactoryBean jobDetail) {
        CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
        tigger.setJobDetail(jobDetail.getObject());
        tigger.setCronExpression("0 30 15 ? * *");// 每天下午15:30触发
//        tigger.setCronExpression("0 36 15 ? * *");// 每天下午15:30触发
        //tigger.set
        tigger.setName("myTigger");// trigger的name
        return tigger;

    }

    @Bean(name = "scheduler")
    public SchedulerFactoryBean schedulerFactory(Trigger cronJobTrigger) {
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        //设置是否任意一个已定义的Job会覆盖现在的Job。默认为false,即已定义的Job不会覆盖现有的Job。
        bean.setOverwriteExistingJobs(true);
        // 延时启动,应用启动5秒后  ,定时器才开始启动
        bean.setStartupDelay(5);
        // 注册定时触发器
        bean.setTriggers(cronJobTrigger);
        return bean;
    }
    //多任务时的Scheduler,动态设置Trigger。一个SchedulerFactoryBean可能会有多个Trigger
    @Bean(name = "multitaskScheduler")
    public SchedulerFactoryBean schedulerFactoryBean(){
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        return schedulerFactoryBean;
    }
}

任务类:uploadTask()定时任务所要执行的主要逻辑

package com.filereport.timer;

import com.filereport.controller.ReportController;
import com.filereport.service.IHolidayService;
import com.filereport.utils.DBUtil21;
import com.filereport.utils.DateTimeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;

import java.util.Iterator;
import java.util.Set;

@Configuration
@Component
@EnableScheduling
public class ScheduleTask {
  /*  public void scheduleTest() {
        System.err.println("scheduleTest开始定时执行");
    }*/

    @Autowired
    private ReportController reportController;

    @Autowired
    private IHolidayService holidayService;

    protected void uploadTask() {
       /* System.out.println("有几个实例呢?--->" + this);
        String postDate = DateTimeUtil.getLastDay();
        String preDay1 = DateTimeUtil.getPreDay1();
        String weekDay = DateTimeUtil.getWeekDay();
        System.out.println("生成-->" + weekDay + "的数据");
        if (Constant.Monday.equals(weekDay)) {
            //周日
            reportController.reportFile(postDate, preDay1);
            //上周六
            reportController.reportFile(DateTimeUtil.getLastSecondDay(), DateTimeUtil.getPreDay2());
            //上周五
            reportController.reportFile(DateTimeUtil.getLastThirdDay(), DateTimeUtil.getPreDay3());

        } else if (Constant.Tuesday.equals(weekDay) || Constant.Wednesday.equals(weekDay)
                || Constant.Thursday.equals(weekDay) || Constant.Friday.equals(weekDay)) {
            reportController.reportFile(postDate, preDay1);
        }else{
            LoggerManager.getMainLogger().info(DateTimeUtil.getToday() +"是"+weekDay+",不生成文件!");
        }*/

        try {
            String today2 = DateTimeUtil.getToday2();
            Set<String> holidaySet = holidayService.getHolidaySet(today2);
            if (holidaySet == null) {
                DBUtil21.sendMessageByProcedure("phonenumber", today2 + "是节假日,当日不上传数据", DateTimeUtil.getCurrentTime());
            } else {
                Iterator<String> iterator = holidaySet.iterator();
                while (iterator.hasNext()) {
                    String date = iterator.next();
                    System.out.println("生成date:" + date + "的数据");
                    reportController.reportFile(date, "");

                }
            }

            if (holidaySet != null) {
                holidaySet.clear();
            }
        } catch (Exception e) {
            DBUtil21.sendMessageByProcedure("18818697645", DateTimeUtil.getCurrentTime() + "生成文件发生异常,请检查!", DateTimeUtil.getCurrentTime());
        }

    }
}

猜你喜欢

转载自blog.csdn.net/bighuan/article/details/81304868