CronTriggerFactoryBean:基于时间刻度,可以设置具体时间。类似与日历的定时方式
SimpleTriggerFactoryBean:基于调度间隔时间 ,有延时启动功能
定时器有三个要素:
1. job:具体需要定时执行的方法,需要具体到某一个类下的某一个具体方法。
2. trigger:触发器,一个触发器需要一个job来对应
3. schedule:调度器(可以调度多个trigger,经检验可以包括不同类的trigger,这句话是抄的没有验证过,应该是可行的,自己的项目中一个调度器实现了两个trigger,一个是完全由XML配置的,另一个是由JAVA代码实现的)
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="overwriteExistingJobs" value="true"/>
<property name="triggers">
<ref bean="SimpleTrigger"/>
</property>
<property name="autoStartup" value="true"></property>
</bean>
<!-- LbsMessageJob:定义目标bean和bean中的方法 -->
<bean id="LbsMessageJob" class="com.wxjss.lbs.quartz.LbsMessageJob"/>
<!-- 配置定时实现方法-->
<bean id="LbsMessageJobMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject"> <!-- 实现的执行类-->
<ref bean="LbsMessageJob"/>
</property>
<property name="targetMethod"> <!-- 要执行的方法名称 -->
<value>execute</value>
</property>
</bean>
<!-- 调度触发器 -->
<bean id="SimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="LbsMessageJobMethod"></property>
<property name="repeatInterval" >
<value>2000</value> <!--设置任务重复时间-->
</property>
<property name="startDelay"> <!--延时开始-->
<value>0</value>
</property>
<property name="repeatCount"> <!--默认0就是不重复,n重复N次,-1一直重复-->
<value>-1</value>
</property>
</bean>
其中LbsMessageJob类中的方法是由java实现的:
public class LbsMessageJob {
public LbsMessageJob() {
}
public void execute() {
System.err.println("hello! "); //经过XML配置以后每次定时结束都会跑过来执行这个方法
}
}
上个结果图: