今天没事学下Quartz触发器的使用,感觉在不久将来的项目中肯定会用到的,就总结了下,以备后期使用。
Quartz触发器是个开源的作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制,
包含SimpleTrigger触发器和CronTrigger 两个触发器。
这里是DEMO的链接地址,直接用netBeans开发环境打开,导入压缩包中的testlib中的jar包即可,
链接地址:Quartz触发器使用的DEMO
spring配置文件applicationContext.xml文件中配置如下:
1、单个SimpleTrigger触发器的使用
<!--任务调度配置--> <!--定义jobDetail,定时执行quartzService这个bean中的test()方法,quartzService在配置文件中就已经配置好了--> <bean id="defineJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!--调度的对象--> <property name="targetObject"> <!--要执行的bean--> <ref bean="quartzService"/> </property> <!--调度对象的方法--> <property name="targetMethod"> <!--要执行的bean中的方法--> <value>test</value> </property> </bean> <!-- 简单的触发器 --> <bean id="simpleTimingJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail"> <ref bean="defineJobDetail" /> </property> <!-- 以毫秒为单位,启动后一分钟触发 --> <property name="startDelay"> <value>60000</value> </property> <!-- 每间隔一分钟触发一次 --> <property name="repeatInterval"> <value>60000</value> </property> </bean> <!--管理触发器列表,可以在bean的list中放置多个触发器--> <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="simpleTimingJobTrigger" /> </list> </property> </bean>
<!--任务调度配置-->
<!--定义jobDetail,定时执行quartzService这个bean中的test()方法,quartzService在配置文件中就已经配置好了-->
<bean id="defineJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--调度的对象-->
<property name="targetObject">
<!--要执行的bean-->
<ref bean="quartzService"/>
</property>
<!--调度对象的方法-->
<property name="targetMethod">
<!--要执行的bean中的方法-->
<value>test</value>
</property>
</bean>
<!-- 第一个触发器 -->
<bean id="simpleTimingJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="defineJobDetail" />
</property>
<!-- 以毫秒为单位,启动后一分钟触发 -->
<property name="startDelay">
<value>60000</value>
</property>
<!-- 每间隔一分钟触发一次 -->
<property name="repeatInterval">
<value>5000</value>
</property>
</bean>
<bean id="testSchedure" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--调度的对象-->
<property name="targetObject">
<!--要执行的bean-->
<ref bean="quartzService"/>
</property>
<!--调度对象的方法-->
<property name="targetMethod">
<!--要执行的bean中的方法-->
<value>testSchedure</value>
</property>
</bean>
<!--第二个触发器 -->
<bean id="testSchedureJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="testSchedure" />
</property>
<!-- 以毫秒为单位,启动后一分钟触发 -->
<property name="startDelay">
<value>60000</value>
</property>
<!-- 每间隔一分钟触发一次 -->
<property name="repeatInterval">
<value>10000</value>
</property>
</bean>
<!--管理触发器列表,可以在bean的list中放置多个触发器-->
<bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="simpleTimingJobTrigger" />
<ref local="testSchedureJobTrigger" />
</list>
</property>
</bean>
CronTrigger 触发器比SimpleTrigger更加的强大,可以自定义任务调度的时间,具体时间参数配置如下(以下是摘自网站上的配置信息):
(1)单个CronTrigger 触发器的使用
<!--任务调度配置--> <!--定义jobDetail,定时执行quartzService这个bean中的test()方法,quartzService在配置文件中就已经配置好了--> <bean id="defineJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!--调度的对象--> <property name="targetObject"> <ref bean="quartzService"/> </property> <!--调度对象的方法--> <property name="targetMethod"> <value>test</value> </property> </bean> <!--触发器设置,设置触发的jobDetail是defineJobDetail,触发的时间为每天凌晨1:00--> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="defineJobDetail"/> </property> <!--触发时间表达式,从左到右,秒、分、时、日、月、星期、年,*号为通配符,?号为不设置该字段--> <property name="cronExpression"> <!--每一分钟执行一次--> <value>0 0/1 * * * ?</value> </property> </bean> <!--管理触发器列表,可以在bean的list中放置多个触发器--> <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="cronTrigger" /> </list> </property> </bean>
<!--任务调度配置--> <!--定义jobDetail,定时执行quartzService这个bean中的test()方法,quartzService在配置文件中就已经配置好了--> <bean id="defineJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!--调度的对象--> <property name="targetObject"> <!--要执行的bean--> <ref bean="quartzService"/> </property> <!--调度对象的方法--> <property name="targetMethod"> <!--要执行的bean中的方法--> <value>test</value> </property> </bean> <!--触发器设置,设置触发的jobDetail是defineJobDetail,触发的时间为每天凌晨1:00--> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="defineJobDetail"/> </property> <!--触发时间表达式,从左到右,秒、分、时、日、月、星期、年,*号为通配符,?号为不设置该字段--> <property name="cronExpression"> <!--每5秒钟执行一次--> <value>0/5 * * * * ?</value> </property> </bean> <bean id="testSchedure" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!--调度的对象--> <property name="targetObject"> <!--要执行的bean--> <ref bean="quartzService"/> </property> <!--调度对象的方法--> <property name="targetMethod"> <!--要执行的bean中的方法--> <value>testSchedure</value> </property> </bean> <!-- 简单的触发器 --> <bean id="testSchedureJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="testSchedure" /> </property> <!--触发时间表达式,从左到右,秒、分、时、日、月、星期、年,*号为通配符,?号为不设置该字段--> <property name="cronExpression"> <!--每6秒钟执行一次--> <value>0/6 * * * * ?</value> </property> </bean> <!--管理触发器列表,可以在bean的list中放置多个触发器--> <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="cronTrigger" /> <ref local="testSchedureJobTrigger" /> </list> </property> </bean>
<!--任务调度配置--> <!--定义jobDetail,定时执行quartzService这个bean中的test()方法,quartzService在配置文件中就已经配置好了--> <bean id="defineJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!--调度的对象--> <property name="targetObject"> <!--要执行的bean--> <ref bean="quartzService"/> </property> <!--调度对象的方法--> <property name="targetMethod"> <!--要执行的bean中的方法--> <value>test</value> </property> </bean> <!--触发器设置,设置触发的jobDetail是defineJobDetail,触发的时间为每天凌晨1:00--> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="defineJobDetail"/> </property> <!--触发时间表达式,从左到右,秒、分、时、日、月、星期、年,*号为通配符,?号为不设置该字段--> <property name="cronExpression"> <!--每5秒钟执行一次--> <value>0/5 * * * * ?</value> </property> </bean> <bean id="testSchedure" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!--调度的对象--> <property name="targetObject"> <!--要执行的bean--> <ref bean="quartzService"/> </property> <!--调度对象的方法--> <property name="targetMethod"> <!--要执行的bean中的方法--> <value>testSchedure</value> </property> </bean> <!-- 简单的触发器 --> <bean id="testSchedureJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail"> <ref bean="testSchedure" /> </property> <!-- 以毫秒为单位,启动后一分钟触发 --> <property name="startDelay"> <value>10000</value> </property> <!-- 每间隔一分钟触发一次 --> <property name="repeatInterval"> <value>10000</value> </property> </bean> <!--管理触发器列表,可以在bean的list中放置多个触发器--> <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="cronTrigger" /> <ref local="testSchedureJobTrigger" /> </list> </property> </bean>