定时批处理作业是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 , - * /