简单的任务调度(自整理)

本文介绍了如何使用Quartz框架实现任务调度,包括任务、触发器和调度器的核心概念,以及如何创建Job、Trigger和Scheduler。同时,还讨论了如何通过Calendar排除特定日期的任务执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                任务调度
                        使用 Quartz 框架实现 1.8.6 的版本 开源框架

什么是任务调度:即是某个时间点做某件时间!
核心有是什么:以时间为关注点!即在一个特定的时间点系统执行的 一个操作!
核心有什么:
    1.任务:就是需要被执行的工作内容!
        实现 Job 接口重写 execute() 方法的编写
        
    2.触发器:决定什么时候执行任务!
        创建 Trigger 类定义 Job 执行的时间触发规则, Trigger 提供了两个实现类,分别:
            ①SimpleTigger:以时间段为关注点
                每隔‘若干’秒执行一次或每指定时间段无限次执行
                
            ②CronTrigger:以指定的时间为关注点
                到达指定的时间点执行
                
    3.调度器:实现将工作任务和触发器绑定,保证任务被执行!
        创建 SchedulerFactory 对象, 并通过其 getScheduler() 方法得到 Scheduler 对象,并 通过其 scheduleJob() 方法绑定任务和触发器
        最后使用其 start()方法开启执行任务

实现方式:
参考 Demo:QuartzDemo 
    1.国际惯例先在项目中创建 lib 文件夹导入包:
        ① log4j-1.2.14.jar
        ② quartz-all-1.8.6.jar
        ③ slf4j-api-1.6.0.jar
        ④ slf4j-log4j12-1.6.0.jar
    2.创建实体类         AdviceJob ,定义属性并提供  get |set 方法
    3.创建被执行的任务类      AdviceJobQuartz ,实现 Job 接口重写 execute() 方法编写
    4.创建触发器         CronTriggerAdvice (固体时间执行) 
                          或  SimpleTriggerAdvice (时间段内执行) 具体参考项目中的实现方式
    5.直接执行!
    
触发器中定义查询,如有特殊要求:例如元旦放假那天就不用执行任务..
解决方案则是使用 Calendar 类(排除某一天)
例子:
    ① 创建任务对象
        JobDetail jobDetail = new JobDetail("jobDetailName","jobDetailGroup",AdviceJobQuartz.class);
        jobDetail.getJobDataMap().put("empName","哆啦");    
    
    ② 创建触发器
        CronTrigger cronTrigger = new CronTrigger("cronTriggerName","cronTriggerGroup","20 58 16 * * ? 2016");
    
    ③ 创建调度器    
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        
    ④ 创建 Calendar        
        AnnualCalendar cal = new AnnualCalendar();
        Calendar myCal = GregorianCalendar.getInstance();
        myCal.set(Calendar.MONTH,Calendar.JANUARY);
        myCal.set(Calendar.DATE,1);
        cla.SetDayExcluded(myCal,true); // 加入要排除的日期
        sched.addCalendar("NewYearHoliday",cal,true,true);  //用 Calendar 注册
        cronTrigger.setCalendarName("NewYearHoliday"); // 与 Trigger 关联
    
    ⑤ 绑定触发器和任务
        scheduler.scheduleJob(jobDetail, cronTrigger);
    
    ⑥ 启动任务
        scheduler.start();
        
    ⑦ 关闭任务(注意关闭前需要 Thread.sleep(10000); 暂停一秒钟,这一秒钟是被执行任务的时间      SimpleTrigger 则不需要关闭)
        scheduler.shutdown();    
    

                
                

转载于:https://my.oschina.net/Shilu/blog/743439

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值