记录工作,为了遗忘
posts - 22, comments - 17, trackbacks - 0, articles - 15
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
spring定时器
Posted on 2006-12-02 16:11
码农cz
阅读(1915)
评论(0)
编辑
收藏
所属分类:
Spring what I know
spring执行定时任务
定义一个任务是很简单的实现TimerTask的run方法就可以了.
如下:SayHelloTask.java
1
package
test.timerTask;
2
import
java.util.TimerTask;
3
public
class
SayHelloTask
extends
TimerTask {
4
public
void
run() {
5
//
TODO Auto-generated method stub
6
System.out.println(
"
测试TimerTask : Hello !!
"
);
7
}
8
}
9
然后是配置文件:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<!
DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd"
>
3
<
beans
>
4
<
bean
id
="sayHelloTask"
class
="test.timerTask.SayHelloTask"
></
bean
>
5
<
bean
id
="scheduledTask"
class
="org.springframework.scheduling.timer.ScheduledTimerTask"
>
6
<
property
name
="timerTask"
>
7
<
ref
bean
="sayHelloTask"
/>
8
</
property
>
9
<!--
任务执行周期 2m 关于一些任务的参数请参考JDK doc文档和Spring相关文档
-->
10
<
property
name
="period"
>
11
<
value
>
2000
</
value
>
12
</
property
>
13
<!--
延时1m 执行任务
-->
14
<
property
name
="delay"
>
15
<
value
>
1000
</
value
>
16
</
property
>
17
</
bean
>
18
<!--
启动定时器
-->
19
<
bean
id
="timerBean"
class
="org.springframework.scheduling.timer.TimerFactoryBean"
>
20
<
property
name
="scheduledTimerTasks"
>
21
<
list
>
22
<
ref
bean
="scheduledTask"
/>
23
</
list
>
24
</
property
>
25
</
bean
>
26
</
beans
>
27
测试类如下:TestApp.java
1
package
test.timerTask;
2
import
org.springframework.context.ApplicationContext;
3
import
org.springframework.context.support.ClassPathXmlApplicationContext;
4
public
class
TestApp
{
5
/** */
/**
6
*
@param
args
7
*/
8
public
static
void
main(String[] args)
{
9
//
TODO Auto-generated method stub
10
ApplicationContext context
=
new
ClassPathXmlApplicationContext(
"
test/timerTask/javaTimer.xml
"
);
11
//
ApplicationContext context2 = new ClassPathXmlApplicationContext("test/timerTask/quartzTimer.xml");
12
}
13
//
只要加载配置文件就可以了,
14
}
15
使用Java中的定时器比较简单,其提供的任务也比较简单, 下面来看看使用quartz来执行一个复杂的任务.
首先制定一个任务, 实现QuartzJobBean中的方法.
1
package
test.timerTask;
2
import
org.quartz.JobExecutionContext;
3
import
org.quartz.JobExecutionException;
4
import
org.springframework.scheduling.quartz.QuartzJobBean;
5
public
class
SayHelloTaskUsingQuartz
extends
QuartzJobBean {
6
protected
void
executeInternal(JobExecutionContext context)
7
throws
JobExecutionException {
8
//
TODO Auto-generated method stub
9
System.out.println(
"
使用Quartz 认为调度: Hello!!
"
);
10
}
11
}
12
配置代码如下:quartzTimer.xml
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<!
DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd"
>
3
<
beans
>
4
<
bean
id
="sayHelloJob"
class
="org.springframework.scheduling.quartz.JobDetailBean"
>
5
<
property
name
="jobClass"
>
6
<
value
>
test.timerTask.SayHelloTaskUsingQuartz
</
value
>
7
</
property
>
8
</
bean
>
9
<!--
关键在如下两个触发器的配置
-->
10
<!--
类似于Java的简单触发器
-->
11
<
bean
id
="helloTrigger"
class
="org.springframework.scheduling.quartz.SimpleTriggerBean"
>
12
<
property
name
="jobDetail"
>
13
<
ref
bean
="sayHelloJob"
/>
14
</
property
>
15
<
property
name
="startDelay"
>
16
<
value
>
1000
</
value
>
17
</
property
>
18
<
property
name
="repeatInterval"
>
19
<
value
>
3000
</
value
>
20
</
property
>
21
</
bean
>
22
<!--
复杂触发器
-->
23
<
bean
id
="helloCronTrigger"
class
="org.springframework.scheduling.quartz.CronTriggerBean"
>
24
<
property
name
="jobDetail"
>
25
<
ref
bean
="sayHelloJob"
/>
26
</
property
>
27
<
property
name
="cronExpression"
>
28
<!--
关键在配置此表达式
-->
29
<
value
>
0 49 15 * * ?
</
value
>
30
</
property
>
31
</
bean
>
32
<
bean
id
="scheduler"
class
="org.springframework.scheduling.quartz.SchedulerFactoryBean"
>
33
<
property
name
="triggers"
>
34
<
ref
bean
="helloCronTrigger"
/>
35
</
property
>
36
</
bean
>
37
</
beans
>
38
关于简单触发器和复杂触发器,查考下面的解释:
Quartz设计者做了一个设计选择来从调度分离开作业。Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。典型地,如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那么或许需要CronTrigger。
CronTrigger是基于Calendar-like调度的。当你需要在除星期六和星期天外的每天上午10点半执行作业时,那么应该使用CronTrigger。正如它的名字所暗示的那样,CronTrigger是基于Unix克隆表达式的。
作为一个例子,下面的Quartz克隆表达式将在星期一到星期五的每天上午10点15分执行一个作业。
0 15 10 ? * MON-FRI
下面的表达式
0 15 10 ? * 6L 2002-2005
将在2002年到2005年的每个月的最后一个星期五上午10点15分执行作业。
你不可能用SimpleTrigger来做这些事情。你可以用两者之中的任何一个,但哪个跟合适则取决于你的调度需要。
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
spring定时器
初识AOP
Powered by:
BlogJava
Copyright © 码农cz
日历
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
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
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
Android(1)
As u(12)
IntellijIDEA
JavaScript(2)
随笔档案
2014年10月 (3)
2012年7月 (4)
2008年5月 (4)
2007年4月 (1)
2007年3月 (1)
2007年1月 (2)
2006年12月 (7)
文章分类
DB----SQL(1)
OtherJava(4)
Spring Around(4)
Spring what I know(2)
文章档案
2008年6月 (1)
2007年10月 (1)
2006年12月 (13)
搜索
最新评论
1. re: struts2拦截器概述
I like this,Good!
--peng2e
2. re: struts2拦截器概述
@wwww
good too
--pirate
3. re: 有关于Spring拦截器[未登录]
asd
--dd
4. re: struts2拦截器概述
good
--wwww
5. re: struts2拦截器概述
good
--ooo
阅读排行榜
1. struts2拦截器概述(6515)
2. 利用Java+POI 读写Excel文档&向Excel中插入图片(1835)
3. Struts2 在Action类中获得HttpServletResponse对象的四种方法(1732)
4. 怎样动态添加文本框并处理(1424)
5. tomcat5.5日志(1400)
评论排行榜
1. struts2拦截器概述(8)
2. Struts2 在Action类中获得HttpServletResponse对象的四种方法(3)
3. 利用Java+POI 读写Excel文档&向Excel中插入图片(2)
4. 怎样动态添加文本框并处理(1)
5. Servlet和Filter的url匹配以及url-pattern详解(0)