上面讲到的服务bean的两种不同实现方式,触发方法就用了spring默认提供的org.springframework.scheduling.quartz.SimpleTriggerBean,在很多时候,这种粗糙的触发是满足不了系统的开发的需求。下面来介绍另一种更灵活的触发方式org.springframework.scheduling.quartz.CronTriggerBean。 配置cronExpression由7部分组成(中间用空格隔开):秒 分 时 日 月 周 年,每一部分都可以精确的指定,也可以是范围,也是可指定是那几个数字,如:1,3,4,5 1-3 4 * * ? *,这个表达式的含义为:每天4时的第1到3分钟内,每分钟内的1,3,4,5执行指定的定时服务。在这里可以看到,定时服务执行了4×3=12次。?表示互斥
把上一个解发器改成CornTriggerBean:
<
bean
id
="logjob2"
class
="quartz2.LogJob1"
></
bean
>
< bean id ="miJobDetail"
class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
< property name ="targetObject" >
< ref bean ="logjob2" />
</ property >
< property name ="targetMethod" >
< value > log </ value >
</ property >
</ bean >
< bean id ="trigger2"
class ="org.springframework.scheduling.quartz.SimpleTriggerBean" >
< property name ="jobDetail" >
< ref bean ="miJobDetail" />
</ property >
< property name ="startDelay" >
< value > 0 </ value >
</ property >
< property name ="repeatInterval" >
< value > 3000 </ value >
</ property >
< property name ="repeatCount" >
< value > 0 </ value >
</ property >
</ bean >
< bean id ="corn1" class ="org.springframework.scheduling.quartz.CronTriggerBean" >
< property name ="jobDetail" >
< ref bean ="miJobDetail" />
</ property >
< property name ="cronExpression" >
< value > 0-30 * * * * ? * </ value >
</ property >
</ bean >
< bean id ="sfb2"
class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
< property name ="triggers" >
< list >
< ref bean ="trigger2" />
< ref bean ="corn1" />
</ list >
</ property >
</ bean >
< bean id ="miJobDetail"
class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
< property name ="targetObject" >
< ref bean ="logjob2" />
</ property >
< property name ="targetMethod" >
< value > log </ value >
</ property >
</ bean >
< bean id ="trigger2"
class ="org.springframework.scheduling.quartz.SimpleTriggerBean" >
< property name ="jobDetail" >
< ref bean ="miJobDetail" />
</ property >
< property name ="startDelay" >
< value > 0 </ value >
</ property >
< property name ="repeatInterval" >
< value > 3000 </ value >
</ property >
< property name ="repeatCount" >
< value > 0 </ value >
</ property >
</ bean >
< bean id ="corn1" class ="org.springframework.scheduling.quartz.CronTriggerBean" >
< property name ="jobDetail" >
< ref bean ="miJobDetail" />
</ property >
< property name ="cronExpression" >
< value > 0-30 * * * * ? * </ value >
</ property >
</ bean >
< bean id ="sfb2"
class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
< property name ="triggers" >
< list >
< ref bean ="trigger2" />
< ref bean ="corn1" />
</ list >
</ property >
</ bean >
spring配置文件装载时,就会执行2个触发器,一个是SimpleTriggerBean,另一个就是CornTriggerBean。在这个corntrigger中指定的含义为每分钟的前30秒执行这个定时服务