Quartz是一个强大的企业级任务调度框架Spring中继承并简化了Quartz下面就看看在Spring中怎样配置Quartz:
首先我们来写一个被调度的类:
package comkayquartz;
public class QuartzJob
{
public void work()
{
Systemoutprintln(Quartz的任务调度!!!);
}
}Spring的配置文件:
<?xml version= encoding=UTF?>
<!DOCTYPE beans PUBLIC //SPRING//DTD BEAN//EN /dtd/springbeansdtd>
<beans>
<! 要调用的工作类 >
<bean id=quartzJob class=comkayquartzQuartzJob></bean>
<! 定义调用对象和调用对象的方法 >
<bean id=jobtask class=orgspringframeworkschedulingquartzMethodInvokingJobDetailFactoryBean>
<! 调用的类 >
<property name=targetObject>
<ref bean=quartzJob/>
</property>
<! 调用类中的方法 >
<property name=targetMethod>
<value>work</value>
</property>
</bean>
<! 定义触发时间 >
<bean id=doTime class=orgspringframeworkschedulingquartzCronTriggerBean>
<property name=jobDetail>
<ref bean=jobtask/>
</property>
<! cron表达式 >
<property name=cronExpression>
<value> * * * * ?</value>
</property>
</bean>
<! 总管理类 如果将lazyinit=false那么容器启动就会执行调度程序 >
<bean id=startQuertz lazyinit=false autowire=no class=orgspringframeworkschedulingquartzSchedulerFactoryBean>
<property name=triggers>
<list>
<ref bean=doTime/>
</list>
</property>
</bean>
</beans>测试程序:
package comkayquartz;
import orgntextApplicationContext;
import orgntextsupportClassPathXmlApplicationContext;
public class MainTest
{
/**
* @param args
*/
public static void main(String[] args)
{
Systemoutprintln(Test start);
ApplicationContext context = new ClassPathXmlApplicationContext(quartzconfigxml);
//如果配置文件中将startQuertz bean的lazyinit设置为false 则不用实例化
//contextgetBean(startQuertz);
Systemoutprint(Test end);
}
}我们需要把logj的配置文件放入src目录下启动main类就可以了
关于cron表达式(来自网络):
Cron 表达式包括以下 个字段:
秒
分
小时
月内日期
月
周内日期
年(可选字段)
特殊字符
Cron 触发器利用一系列特殊字符如下所示:
反斜线(/)字符表示增量值例如在秒字段中/代表从第 秒开始每 秒一次
问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用问号表示这个字段不包含具体值所以如果指定月内日期可以在周内日期字段中插入?表示周内日期值无关紧要字母 L 字符是 last 的缩写放在月内日期字段中表示安排在当月最后一天执行在周内日期字段中如果L单独存在就等于否则代表当月内周内日期的最后一个实例所以L表示安排在当月的最后一个星期日执行
在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日把W放在月内日期字段中表示把执行安排在当月的第一个工作日内
井号(#)字符为给定月份指定具体的工作日实例把MON#放在周内日期字段中表示把任务安排在当月的第二个星期一
星号(*)字符是通配字符表示该字段可以接受任何可能的值
字段 允许值 允许的特殊字符
秒 * /
分 * /
小时 * /
日期 * ? / L W C
月份 或者 JANDEC * /
星期 或者 SUNSAT * ? / L C #
年(可选) 留空 * /
表达式意义
* * ? 每天中午点触发
? * * 每天上午:触发
* * ? 每天上午:触发
* * ? * 每天上午:触发
* * ? 年的每天上午:触发
* * * ? 在每天下午点到下午:期间的每分钟触发
/ * * ? 在每天下午点到下午:期间的每分钟触发
/ * * ? 在每天下午点到:期间和下午点到:期间的每分钟触发
* * ? 在每天下午点到下午:期间的每分钟触发
? WED 每年三月的星期三的下午:和:触发
? * MONFRI 周一至周五的上午:触发
* ? 每月日上午:触发
L * ? 每月最后一日的上午:触发
? * L 每月的最后一个星期五上午:触发
? * L 年至年的每月的最后一个星期五上午:触发
? * # 每月的第三个星期五上午:触发
每天早上点
* * *
每两个小时
*/ * * *
晚上点到早上点之间每两个小时早上八点
/ * * *
每个月的号和每个礼拜的礼拜一到礼拜三的早上点
*
月日早上点
*