spring中涉及quartz的配置

来源:互联网 发布:北师大网络教育作业 编辑:程序博客网 时间:2024/06/03 12:44

项目中遇到了使用定时工作的程序,数目还很多,于是由于spring的方便性,使用spring-quartz!

使用之前,需要在项目中引入quartz的jar包,要注意quartz和spring版本的匹配,我使用的是quartz1.6.2,spring是2.0.7。

1. spring中涉及quartz的配置:


项目中遇到了使用定时工作的程序,数目还很多,于是由于spring的方便性,使用spring-quartz!

使用之前,需要在项目中引入quartz的jar包,要注意quartz和spring版本的匹配,我使用的是quartz1.6.2,spring是2.0.7。

1. spring中涉及quartz的配置:

<!-- 配置quartz调度,指定加载哪些触发器--> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers">    <list>      <ref bean="sendEvaDataTrigger" />    </list></property></bean>      <!-- 配置quartz的触发器,指定该触发器触发的条件,以及该触发器加载哪些job--> <bean id="sendEvaDataTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail">    <ref bean="sendEvaDataJobDetail" /></property><!-- 59秒 59分 23时 每天 每月 不指定星期 --><property name="cronExpression" value="59 59 23 * * ?" /></bean><!-- 配置quartz的任务,指定该任务执行哪一个bean的哪一个方法--> <bean id="sendEvaDataJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="sendEvaDataJob" /><property name="targetMethod" value="sendEvaDataEveryDay" /></bean><!-- 配置需要定时执行的spring bean--> <bean id="sendEvaDataJob" class="com.euvnet.ccc.common.SendEvaDataJobImpl"><property name="agentEvaluateManage" ref="agentEvaluateManage"></property><property name="orgRemoteConfig" ref="orgRemoteConfig"></property></bean>

在配置时,考虑到quartz的特殊性,可以将这些配置单独放在一个配置文件中,这样在以后修改比较方便。

2. 注意事项

quartz有两种方式记录需要管理调度的job,一种是内存方式,一种是数据库方式,如果spring中配置的数据源id为“dataSource”并且bean加载方式为自动装载,spring加载quartz时,会强制将quartz置为数据库方式。解决方法一个是修改数据源id的名称,另外一个是关闭spring对bean的加载方式(因此把quartz相关的配置写在一个配置文件中还是比较方便些)。

3. cronExpression格式说明

表达式: Seconds Minutes Hours Day-of-month Month Day-of-Week Year

说明:

表达式由6个或7个字符串组成,字符之间用空格分隔;前6个为必选项,year为可选项;

字符串的取值不区分大小写;

允许的值和特殊字符可单独使用或组合使用;

特殊符号:

星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都触发。

整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月触发一次。

问号(?)表示不指定任何值,主要用于day of month 和day of week,当指定其中一个值的时候,另一个设置为问号,避免前后不一致。

L表示最后一天, 主要用于day of month 和day of week,每月的最后一天,每周的最后一天,用于day of month 时只能单独使用,用于day of week时可以组合使用,例如6L, 表示指定月的最后一个星期五.

W用于day of month, 表示离指定日期最近的工作日(周一至周五), 例如6W,如果这个月的第6天为周六,则表示周五(这个月的第5天);如果第6天为周日,则表示周一(这个月的第7天);如果第6天为工作日,则为当日;如果按正常推算的日期为上月或下月,则在本月内查找最近的工作日;

LW组合使用表示这个月的最后一个工作日;

#用于day of week, #号后面跟数字n表示本月的第n个X., 例如6#3 表示指定月的第三个星期五;
转自:http://wei5201.iteye.com/blog/737568
0 0
原创粉丝点击