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;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
如果你不会Cron表达式,可以进去下面这个网站,它会根据你的要求生成相应表达式
在线Cron表达式生成器 : http://cron.qqe2.com/
2.3在web.xml注册监听器
<listener>
<listener-class>com.quartz.main.ApplicationContextListener</listener-class>
</listener>
1
2
3
在你的web.xml中添加这段代码,当然路径改成你编写的Listener类的路径,如果最后一步没有做的话,就前功尽弃了
3.总结
最近在忙着做web项目,需要使用到quartz框架,但是现在对quartz还不是了解的很深入,以后会进一步学习,也会不定时的更新这方面的内容,如果有兴趣可以关注我的博客<^_^>
-