在spring中使用Quartz配置job的方式

定时批处理作业是J2EE企业应用里很重要的一环,用来在晚间进行财务挂账,数据转存,数据处理分析等等操作。

 而在Spring里,已经很好的集成了Quartz,简单到像配cron一样,在xml文件里面配一下时间就可以自动执行,不需要写一行代码。

Spring对Quartz大刀阔斧的简化堪称范例,下面我们来看下如何实现

在网上比较流行的一段配置:

<?xmlversion="1.0"encoding="UTF-8"?>  
 <beansxmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:aop="http://www.springframework.org/schema/aop" 
  xmlns:tx="http://www.springframework.org/schema/tx" 
  xsi:schemaLocation="http://www.springframework.org/schema/beans  
  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  http://www.springframework.org/schema/aop  
  http://www.springframework.org/schema/aop/spring-aop-2.0.xsd  
  http://www.springframework.org/schema/tx  
  http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"  
  default-autowire="no"default-lazy-init="false">  
 
  <beanid="someData"class="com.spring.job.JobData"/>  
 
   <beanid="jobDetailBean" 
      class="org.springframework.scheduling.quartz.JobDetailBean">  
     <propertyname="jobClass" 
       value="com.spring.job.DemoJob"/>  
     <propertyname="jobDataAsMap">  
       <map>  
         <entrykey="jobData"value-ref="someData"/>  
       </map>  
     </property>  
   </bean>  
 
<beanid="jobDetailBean2" 
      class="org.springframework.scheduling.quartz.JobDetailBean">  
     <propertyname="jobClass" 
       value="com.spring.job.DemoJob2"/>  
     <propertyname="jobDataAsMap">  
       <map>  
         <entrykey="jobData"value-ref="someData"/>  
       </map>  
     </property>  
   </bean>  
 
   <beanid="simpleTriggerBean" 
      class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
     <propertyname="jobDetail"ref="jobDetailBean"/>  
     <propertyname="repeatInterval"value="500000"/>  
     <propertyname="startDelay"value="10000"/>  
   </bean>  
 
     <beanid="simpleTriggerBean2" 
      class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
     <propertyname="jobDetail"ref="jobDetailBean2"/>  
     <propertyname="repeatInterval"value="100000"/>  
     <propertyname="startDelay"value="10000"/>  
   </bean>  
 
   <beanid="schedulerFactoryBean" 
      class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
     <propertyname="triggers">  
       <list>  
         <refbean="simpleTriggerBean"/>  
         <refbean="simpleTriggerBean2"/>  
       </list>  
     </property>  
   </bean>  
 
 </beans> 

另外一个配置的例子,这个例子是有注释的:

1.<?xml version="1.0" encoding="UTF-8"?>  
2.<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
3.<beans>  
4.<!--起动Bean-->  
5. <bean id="z" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
6.    <property name="triggers">  
7.        <list>  
8.      
9.            <ref bean="cronReportTrigger"/>  
10.        </list>  
11.    </property>  
12. </bean>   
13.<!--实际的工作Bean-->  
14.  <bean id="courseService" class="com.spring.helloworld.CourseService"></bean>  
15.<!--jobBean用于设定启动时运用的Bean与方法-->  
16. <bean id="scheduledReportJobDetail"    
17.class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
18.     <property name="targetObject">  
19.        <ref  bean="courseService"/>    
20.     </property>  
21.     <property name="targetMethod">  
22.         <value>sendCourseEnrollmentReport</value>  
23.     </property>  
24. </bean>  
25.<!--定时器设定起动频率&启动时间我设的是每5秒起动一次 (0 0  4 * * ?每日四点起动....)-->  
26. <bean id="cronReportTrigger"   
27.class="org.springframework.scheduling.quartz.CronTriggerBean">  
28. <property  name="jobDetail"><ref bean="scheduledReportJobDetail"/>  
29. </property>  
30. <property name="cronExpression"><value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>    
31.</property>  
32. </bean>  
33.      
34.</beans> 
后面的这个配置就觉得很简单,直接在创建一个接口和实现类就可以了。甚至不必去创建,用原来的相信也应该可以的。


附:cronExpression配置说明


字段   允许值   允许的特殊字符
秒    0-59    , - * /
分    0-59    , - * /
小时    0-23    , - * /
日期    1-31    , - * ? / L W C
月份    1-12 或者 JAN-DEC    , - * /
星期    1-7 或者 SUN-SAT    , - * ? / L C #
年(可选)    留空, 1970-2099    , - * /

猜你喜欢

转载自cjjwzs.iteye.com/blog/1071186