首页 > 代码库 > 使用Spring集成Quartz

使用Spring集成Quartz

Quartz:

Quartz调度包的两个基本单元是作业(Job)和触发器(Trigger)。作业是能够调度的可执行任务,触发器提供了对作业的调度。虽然这两个实体很容易合在一起,但在Quartz中将它们分离开来是有原因的,而且也很有益处。通过把要执行的工作与它的调度分开,Quartz允许在不丢失作业本身或作业的上下文的情况下,修改调度触发器。而且,任何单个的作业都可以有多个触发器与其关联

 

使用Spring集成Quartz: 本系统使用Spring来集成Quartz。我们只需要在Spring中配置相应的Trigger和Job,而不需要编写任何Java代码,Spring在找到这些bean后会自动启动这些Job。

Spring配置: <bean id="dumbJob" class="org.springframework.scheduling.quartz.JobDetailBean">

<property name="group " value="http://www.mamicode.com/dumb"/>

<property name="jobClass " value="http://www.mamicode.com/example.DumbJob"/>

<property name="name" value="http://www.mamicode.com/dumbJob"/>

</bean>

<bean id="settlementJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<property name="targetObject" ref="settlementBizFacade"/>

<property name="targetMethod" value="http://www.mamicode.com/doSettlement"/>

<property name="concurrent" value="http://www.mamicode.com/false"/>

<property name="name" value="http://www.mamicode.com/settlement"/>

</bean> <bean id="settlementTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail" ref="settlementJob"/>

<!-- run at 23:55 everyday -->

<property name="cronExpression" value="http://www.mamicode.com/0 55 23 * * ?"/>

</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list> <ref bean="settlementTrigger"/>

</list> </property> <property name="quartzProperties">

<map> <!-- 1 job thread, change this if more jobs added -->

<entry key="org.quartz.threadPool.threadCount" value="http://www.mamicode.com/1"/>

</map>

</property>

</bean>

首先我们需要配置一个Job,这里有两种方式:一种是为Job创建一个独立的JobClass,然后使用Spring的JobDetailBean配置该Job;另一种是使用MethodInvokingJobDetailFactoryBean指定一个方法,不需要一个单独的JobClass,它需要设置“targetObject”和“targetMethod”,则Trigger触发该Job的时候,目标方法会被调用。这里把“concurrent”设置为“false”,这被调用的方法不会在新线程里运行,而是顺序执行。 接下来我们配置了一个名为“settlementTrigger”的Cron触发器,它定义了settlementJob合适被调用。 最后需要配置的是SchedulerFactoryBean,它负责调度所有的trigger,还可以配置Quartz。因为当前的任务间隔较远,没有频繁执行的要求,所以这里把Quartz的线程数设为“1”

使用Spring集成Quartz