Spring-Quartz

Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz。

 

首先,感谢刘波老师,提供了个例子给我学习。

 

需要导入的类库(这里用的是Spring2.5):

1.Spring 2.5 Core Libraries

2.Spring 2.5 Misc Libraries

3.Spring 2.5 AOP Libraries

 

一、被调度的类:

 

package org.newboy.biz;

import java.sql.Timestamp;
import java.util.Date;

/**
 * 需要定时运行的方法
 * 
 * @author newboy
 * 
 */
public class BusinessReport {

	// 初始一数字变量
	static long count = 0;

	/**
	 * 被调度的方法
	 */
	public void perform() {
		count++;
		System.out.println(new Timestamp(new Date().getTime()) + " count=" + count);
	}

}

 

二、Spring的配置文件:

 

<?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-2.5.xsd">

	<!-- 我的业务类 -->
	<bean id="businessReport" class="org.newboy.biz.BusinessReport" />

	<!-- 定义目标bean和bean中的方法 -->
	<bean id="reportTask"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 相应的类 -->
		<property name="targetObject" ref="businessReport" />
		<!-- 相应的方法 -->
		<property name="targetMethod" value="perform" />
		<property name="concurrent" value="false" />
	</bean>

	<!-- 配置触发器,触发器加载哪些job,定义触发的时间 -->
	<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="reportTask" />
		<!-- 设置cron表达式 -->
		<property name="cronExpression" value="0-59 * * * * ?" />
	</bean>

	<!-- 配置quartz调度,指定加载哪些触发器 -->
	<bean id="startScheduler"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="cronTrigger" />
			</list>
		</property>
	</bean>

</beans>

 

 

三、测试类:

 

package org.newboy.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * 测试类
 * @author newboy
 *
 */
public class TestBiz {

	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
	}

}

 

四、放入log4j.properties文件到src目录下

 

五、放入cron表达式.txt文件到src目录下,然后运行Main函数就OK了。

 

      关于cron表达式(来自网络)

      Cron表达式包括以下 7 个字段:

            1.秒

            2.分

            3.时

            4.月

            5.月内日期

            6.周内日期

            7.年(可选字段)

 

 六、Cron表达式的一些解释:

      

cronExpression格式说明

表达式: Seconds Minutes Hours Day-of-month Month Day-of-Week Year

说明:

表达式由6个或7个字符串组成,字符之间用空格分隔;前6个为必选项,year为可选项;

字符串的取值不区分大小写;

允许的值和特殊字符可单独使用或组合使用;

星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都触发。

整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月触发一次。

问号(?)表示不指定任何值,主要用于day of month 和day of week,当指定其中一个值的时候,另一个设置为问号,避免前后不一致。

L表示最后一天, 主要用于day of month 和day of week,每月的最后一天,每周的最后一天,用于day of month 时只能单独使用,用于day of week时可以组合使用,例如6L, 表示指定月的最后一个星期五.

W用于day of month, 表示离指定日期最近的工作日(周一至周五), 例如6W,如果这个月的第6天为周六,则表示周五(这个月的第5天);如果第6天为周日,则表示周一(这个月的第7天);如果第6天为工作日,则为当日;如果按正常推算的日期为上月或下月,则在本月内查找最近的工作日;

LW组合使用表示这个月的最后一个工作日;

#用于day of week, #号后面跟数字n表示本月的第n个X., 例如6#3 表示指定月的第三个星期五;

举例:
0-59 , - * / 分
0-59 , - * / 小时
0-23 , - * / 日期
1-31 , - * ? / L W C 月份
1-12 或者 JAN-DEC , - * / 星期
1-7 或者 SUN-SAT , - * ? / L C # 年(可选) 留空, 1970-2099 , - * /

"0 0 12 * * ?" 每天中午12点触发

"0 15 10 ? * *" 每天上午10:15触发

"0 15 10 * * ?" 每天上午10:15触发

"0 15 10 * * ? *" 每天上午10:15触发

"0 15 10 * * ? 2005" 2005年的每天上午10:15触发

"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发

"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发

"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发

"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发

"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发

"0 15 10 15 * ?" 每月15日上午10:15触发

"0 15 10 L * ?" 每月最后一日的上午10:15触发

"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发

"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发

"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

 

 七、demo

Spring-Quartz.zip

 

 

你可能感兴趣的:(spring)