项目开发中用到了quartz定时器,感觉很像javaJDK中的Timer类,但是不同的是,quartz提供的定时器可以按每天的固定时刻触发,或者其他的时间。触发时间比较人性化。
我自己写了个小的项目,练练手。开发Spring的quartz定时器需要spring-context.jar和quartz.jar包,我最初没有导入quartz.jar包,导致报错。
quartz的maven依赖如下:
<dependency>
<groupId>org.opensymphony.quartz</groupId>
<artifactId>quartz-all</artifactId>
<version>1.6.1</version>
</dependency>
定时器类不需要继承自任何类。
package com.jd.service.meeting.worker;
public class MyWorker {
public void running(){
System.out.println("hello, world!");
}
}
然后在spring的配置文件中配置这个定时器即可。
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName">
<bean id="helloWorker" class="com.jd.service.meeting.worker.MyWorker"></bean>
<bean id="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<bean class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<bean
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="concurrent">
<value>false</value>
</property>
<property name="targetObject">
<ref bean="helloWorker" />
</property>
<property name="targetMethod">
<value>running</value>
</property>
</bean>
</property>
<property name="cronExpression">
<value>0/10 * * * * ?</value>
</property>
</bean>
</list>
</property>
</bean>
</beans>
这个时间表达式指定了这个timer的触发时间规则,我指定的是每10秒跑一次。
<property name="cronExpression">
<value>0/10 * * * * ?</value>
</property></span>
我的程序本地运行通过,大家配好jar包即可。
在另一篇文章中,介绍了如何仅仅使用Spring来开发定时器,十分简洁,有兴趣的可以看下(点击打开链接)。