Quartz整合web项目(不基于spring)

Quartz常用在Web应用中,常见的是交由Spring托管的形式,但这里并非介绍这个。这里介绍Quartz在Web应用中单独使用,如果对Quartz还没有基本的理解,可以参考我之前的博文:Quartz入门

假设现在你对Quartz已经有了初步的认识,那么就来开启你的Quartz之旅吧.

1.分析应用场景

一般来说,Web应用中,当我们需要执行某些定时操作时,就可以考虑使用我们强大的Quartz框架了.但是往往不会怎么让quartz单独整合项目,并且网上很多资料都是介绍在spring中整合quartz来使用的
但是,在这里不使用spring,而是使用监听器在应用启动时注册,记得在web.xml注册这个监听器哦(>_<);在关闭Web应用时,也要相应的注销定时任务。

2.步骤

步骤与之前Quartz入门很相似,导包,编写相应的定时作业类都一样,只是将之前编写的test类变为Listener类型罢了

2.1新建Listener类

在相应的包下创建Listener类,记得勾上第一个选项
这里写图片描述
这里写图片描述

2.2编写Scheduler
package com.quartz.main;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import com.quartz.job.*;

/**
 * Application Lifecycle Listener implementation class
 * ApplicationContextListener
 *
 */
public class ApplicationContextListener implements ServletContextListener {
    public static Scheduler scheduler = null;

    /**
     * Default constructor.
     */
    public ApplicationContextListener() {
    }

    /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
     //关闭Web应用时,注销定时任务
    public void contextDestroyed(ServletContextEvent arg0) {
        try {
            scheduler.shutdown();
            System.out.println("scheduler.shutdown");
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
     //开启Web应用时,开启定时任务
    public void contextInitialized(ServletContextEvent arg0) {
        try {
            scheduler = StdSchedulerFactory.getDefaultScheduler();
//在这里我编写了三个定时任务
            JobDetail updataTheStatus = JobBuilder.newJob(updataTheStatus.class)
                    .withIdentity("updataTheStatus", "group1")
                    .build();

            JobDetail updateTheRemainer = JobBuilder.newJob(updateTheRemainer.class)
                    .withIdentity("updateTheRemainer", "group2")
                    .build();

            JobDetail deleteYstdayOrder = JobBuilder.newJob(deleteYstdayOrder.class)
                    .withIdentity("deleteYstdayOrder", "group3")
                    .build();
            //三个触发器
            Trigger trigger1 = updateTheStatus();
            Trigger trigger2 = updateTheRemainer();
            Trigger trigger3 = deleteYstdayOrder();
            //注册
             scheduler.scheduleJob(updataTheStatus, trigger1); 
             scheduler.scheduleJob(updateTheRemainer, trigger2); 
             scheduler.scheduleJob(deleteYstdayOrder, trigger3); 
             scheduler.start();
             System.out.println("start");
        } catch (SchedulerException e) {
            e.printStackTrace();
        }


    }

    //下面是定义三个触发器的静方法
    public static Trigger updateTheStatus() {
        //每一小时执行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "group1")    
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0/1 1/1 * ? "))
                .startNow()
                .build();
        return trigger;
    }

    public static Trigger updateTheRemainer() {
        //每天的00:00分开始执行,每天执行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger2", "group2")    
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 1/1 * ? "))
                .startNow()
                .build();
        return trigger;
    }

    public static Trigger deleteYstdayOrder() {
        //每天的00:0分开始执行,每天执行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger3", "group3")    
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 1/1 * ? "))
                .startNow()
                .build();
        return trigger;
    }


}

如果你不会Cron表达式,可以进去下面这个网站,它会根据你的要求生成相应表达式

在线Cron表达式生成器 : http://cron.qqe2.com/

2.3在web.xml注册监听器
<listener>
    <listener-class>com.quartz.main.ApplicationContextListener</listener-class>
</listener>

在你的web.xml中添加这段代码,当然路径改成你编写的Listener类的路径,如果最后一步没有做的话,就前功尽弃了

3.总结

最近在忙着做web项目,需要使用到quartz框架,但是现在对quartz还不是了解的很深入,以后会进一步学习,也会不定时的更新这方面的内容,如果有兴趣可以关注我的博客<^_^>

猜你喜欢

转载自blog.csdn.net/stormdony/article/details/79893908