使用spring+quartz实现任务调度
这里使用的是spring 2.5
相关的jar文件:
commons-collections-3.1.jar,jta.jar,quartz-all-1.6.0.jar,spring.jar,spring-context.jar,spring-context-support.jar
1. web.xml ,配置spring
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
2. 编写任务类 QuartzJob1
public class QuartzJob1
public void work(){
task1();
}
public void task1(){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(df.format(new Date().getTime())+" 调度任务1 每隔5秒钟执行一次");
}
}
3. quartz 配置(applicationContext.xml)
<!-- 定时器配置 -->
<!-- 任务1 -->
<bean id="quartzJob1" class="com.timer.job.QuartzJob1" >
<!--<property name="publishDao" ref="publishDao" />-->
</bean>
<bean id="jobtask1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="quartzJob1" />
</property>
<property name="targetMethod">
<value>work</value>
</property>
<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
<property name="concurrent" value="true"/>
</bean>
<bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobtask1" />
</property>
<property name="cronExpression">
<!-- 每隔5秒执行一次 <value>0/10 * * * * ?</value> -->
<!-- 每隔10秒执行一次 <value>0/10 * * * * ?</value> -->
<!-- 每天每隔10分钟执行一次 <value>0 0/10 * * * ?</value> -->
<value>0/5 * * * * ?</value>
</property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger1" />
</list>
</property>
</bean>
<!-- 定时器END -->
启动web服务器,可以看到spring任务已经按周期性的执行了,大功告成。
原文链接:
http://blog.csdn.net/u013614451/article/details/40711643
另一种配置方法,服务器启动后执行一次任务然后再周期性执行任务,使用SimpleTriggerBean
<!-- 定时扫描周期,如果已到期,则结束周期 --> <!-- 定时任务的工作Bean,普通的Java类 --> <bean id="quartzJob" class="com.gy.xf.task.TestJob" > <property name="dao" ref="alarmFireDispatchDao"></property> </bean> <!-- 定义生成工作对象的工厂,并为工厂设定目标对象targetObject属性、目标对象的工作方法targetMethod属性 --> <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="quartzJob"/> <property name="targetMethod"> <value>test</value> </property> <property name="concurrent" value="false"/> </bean> <!-- 任务调度计时器,进行定时设置。CronTriggerBean能进行非常精确的定时设置 --> <bean id="cronQuartzClock1" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="jobDetail" /> <!-- cron表达式 --> <property name="cronExpression"> <!-- 0 0 */2 * * ? 每两小时、整点触发 --> <!-- 0 0/2 * * * ? 每两分钟 --> <!-- 0/5 * * * * ? 每五秒钟 --> <!-- 0 15 10 * * ? 每天Y分X点触发 --> <value>0 0 */1 * * ?</value> </property> </bean> <bean id="workflowTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="jobDetail" /> <!-- 这里定义的是服务启动后多少秒之后启动定时器,单位是毫秒,下面设置的是十秒 --> <property name="startDelay" value="10000" /> <!-- 这里定义的是循环的周期,单位是毫秒 --> <property name="repeatInterval" value="120000" /> </bean> <!-- 调度任务触发器,启动定时任务--> <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="workflowTrigger"/> </list> </property> </bean>