Quartz是一个完全由java
编写的开源作业调度框架。
在spring中整合Quartz 进行任务调度;首先将需要用到的jar包引入项目的lib目录下jar包的下载在Quartz的官网,Quartz的官网:http://www.quartz-scheduler.org/;
需要两个jar包,“org.springframework.context.support-3.0.2.RELEASE.jar”此包是spring根据quartz中的主要类进行再次封装成具有bean风格的类;
“quartz-1.8.6.jar” quartz的核心包
现在spring中配置基本的bean
<bean id="mytask" class="com.xcm.nsfu.complain.service.MyTask"></bean>
要在spring 中利用quartz调度任务;需要配置三个bean:
-
jobDetail 任务详细信息;包括调用哪个类;类中的哪个方法;执行时是否可并行执行任务。<!-- 1、制定任务信息信息 -->
<bean id="complainJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 设置执行对象 -->
<property name="targetObject" ref="mytask"></property>
<!-- 设置执行对象中对应的执行方法 -->
<property name="targetMethod" value="doMyTask"></property>
<!-- 是否可以同步执行;不可同步执行 -->
<property name="concurrent" value="false"></property>
</bean> -
trigger 任务调度触发器;主要用于定义jobDetail什么时候执行。触发器最常用的有两种:简单触发器SimpleTrigger 和任务触发器CronTrigger 。SimpleTrigger和jdk的timer类似,只能指定任务执行以什么样的频率执行,但无法制定精确的执行时间。CronTrigger则既可以执行简单触发器所制定的以频率来执行的时间,也可以制定复杂的时间计划来执行。如可制定:每个月的最后一天的15点来执行相关任务。
<bean id="complainCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 设置任务详细 -->
<property name="jobDetail" ref="complainJobDetail"></property>
<!-- 设置任务执行时机,cron表达式 -->
<property name="cronExpression" value="5,10,15,20 * * * * ?"></property>
</bean>在表达式中时间格式间用空格隔开,每个时间表示:秒分钟 小时 日 月 周 年(可选填)。
3.schedulerFactory 任务调度工厂;用于调度各个任务触发器。<!-- 3、设置调度工厂 -->
<bean id="complainSchedule" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- <ref bean="simplerTrigger"/> -->
<ref bean="complainCronTrigger"/>
</list>
</property>
</bean>
类MyTask代码如下:
public class MyTask {
public void doMyTask(){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("正在用Quartz执行任务调度......"+sdf.format(new Date()));
}
}
配置文件中<property name="cronExpression" value="5,10,15,20 * * * * ?"></property>表示在任意天的任意时任意分的第5,10,15,2o秒时执行对应的方法。
运行结果如下: