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类,记得勾上第一个选项

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

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

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还不是了解的很深入,以后会进一步学习,也会不定时的更新这方面的内容,如果有兴趣可以关注我的博客<^_^>

-

相关推荐