首先来看一下简单版的定时器配置,它是直接调用java自身的定时器类的
下面是配置文件,主要是任务bean,定时器bean,和定时器启动bean
定时器的启动启动bean可以同时启动多个定时器,
定时器的主要参数为任务周期、任务延迟时间、和定时任务
<?xml
version="1.0"
encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 任务bean -->
<bean
id="myTask"
class="com.cheng.bean.MyTask"
/>
<!-- 定时器设置 -->
<bean
id="scheduled"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property
name="timerTask">
<ref
bean="myTask"/>
</property>
<!-- 此处 设置任务的周期,单位毫秒-->
<property
name="period"
value="1000"
/>
<!-- 此处设置延迟时间,单位毫秒 -->
<property
name="delay"
value="1000"
/>
</bean>
<!-- 定时器启动bean -->
<bean
id="timerBean"
class="org.springframework.scheduling.timer.TimerFactoryBean">
<property
name="scheduledTimerTasks">
<list>
<ref
bean="scheduled"
/>
</list>
</property>
</bean>
</beans>
这个跟非spring版本的是一样的,都需要继承TimerTask类
package com.cheng.bean;
import java.util.TimerTask;
public
class MyTask extends TimerTask {
public
void run() {
System.out.println("执行........");
}
}
import java.util.TimerTask;
public
class MyTask extends TimerTask {
public
void run() {
System.out.println("执行........");
}
此类是测试类,大家只需要加载相关的定时器的配置文件就可以啦
package com.cheng.bean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public
class Test {
public
static
void main(String[] args) {
ApplicationContext
context =
new ClassPathXmlApplicationContext("applicationContext.xml ");
}
}
下面是quartz版的
配置是一样的,只不过是用的quartz的jar,让任务bean承继QuartzJobBean,如下
package com.cheng.test;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public
class MyTask extends QuartzJobBean {
protected
void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("执行任务..........");
}
}
<?xml
version="1.0"
encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 需要执行的任务 -->
<bean
id="myJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property
name="jobClass"
value="com.cheng.test.MyTask"/>
</bean>
<!-- 简单版的对任务的参数的设置 -->
<bean
id="simpleTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property
name="jobDetail"
ref="myJob"
/>
<property
name="startDelay"
value="1000"
/>
<property
name="repeatInterval"
value="1000"
/>
</bean>
<!-- 复杂版的对任务参数的配置(也不是很复杂) -->
<bean
id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property
name="jobDetail"
ref="myJob"
/>
<property
name="cronExpression"
value=" 0 18 15 ? * MON-FRI"
/>
</bean>
<!-- 启动任务 -->
<bean
id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property
name="triggers"
ref="cronTrigger"
/>
<!--<property
name="triggers" ref="simpleTrigger" />-->
</bean>
</beans>
简单版与复杂版的区别就在于复杂版对于定时的操作很灵活,有自己的一套表达式,下面就介绍一下表达式
表达式的书写格式:秒 分 时 日 月 周 年(如:1 1 12 * * ? 表示:每天的12:01:01)
秒:0-59 可用字符(, - / *)
分:0-59 可用字符(, - / *)
时:0-23 可用字符(, - / *)
日:1-31(有日不能有周,让周用?表示) 可用字符(, - / * ? L W C)
月:1-12(或JAN-DEC) 可用字符(, - / *)
周:1-7(或SUN-SAT) 可用字符(, - / * ? L C #)
年:empty,1970-2099 可用字符(, - / *)
, :表示连接多个值,如 1 1,5 12 * * ?表示在每天的12:01:01和12:05:01两个时段都执行
_ :表示一个区域,如 1 1 12 * * ?表示在每天的12:01:01至12:05:01这个时段内每分钟的第一秒执行
* :表示全部,比如用在分上,表示每分,用在时上表示每时
? :主要是用来区分日和周的,表示不用此类型,在上面已有解释
/ :表示一个间隔,如:1 0/5 12 * * ?表示从0分开始,每五分钟执行一次
L :表示最后,用在日上表示本月最后一天,用在周中有两种表示含意,一种是只写一个L,表示7或者周六,另一种是写在数字后面,如1L,表示每月的最后一个周日
W :表示离指定工作日(即周一到周五)最近的一天,如果指定的当天为工作日,那么就是当天执行,如果是周六,那么就本周五执行,周日就下周一执行,但是如果指定的工作日是周六,而且今天是本月第一天,那么就下周一执行,因为它的执行范围只在本个月内。
# :格式是这样的1#2 表示本月的第二个周日,也就是#前的数字表示周几,#后的数字表示第几个
C :这个网上很少说,说了我也没有明白,希望有人给出正解,下面是我在百度中看到的

718

被折叠的 条评论
为什么被折叠?



