spring&quartz的项目施用总结

spring&quartz的项目应用总结

一.名词简介:
Quartz是一个完全由java编写的开源作业调度框架。Spring 为创建Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean类,以便能够在 Spring 容器中享受注入的好处。此外Spring还提供了一些便利工具类直接将Spring中的Bean包装成合法的任务。Spring进一步降低了使用 Quartz的难度,能以更具Spring风格的方式使用Quartz。概括来说它提供了两方面的支持:
1)为Quartz的重要组件类提供更具Bean风格的扩展类;
2)提供创建Scheduler的BeanFactory类,方便在Spring环境下创建对应的组件对象,并结合Spring容器生命周期进行启动和停止的动作。

二。项目实践

情景一:集群部署,持久化,动态创建schedule配置
1.spring-schedule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<bean id="GMTZone" class="java.util.TimeZone" factory-method="getTimeZone">
<constructor-arg value="GMT"/>
</bean>

<!--业务job生成工厂,该工厂注入了scheduleManager -->
<bean id="pharmaskyJobFactory " class="com.infowarelab.pharmasky.service.schedule.PharmaskyJobFactory "/>

<!--schedule管理器,用于动态添加,修改,删除schedule -->
<bean id="scheduleManager" class="com.infowarelab.pharmasky.service.schedule.ScheduleManager">
<property name="scheduler" ref="scheduleFactoryBean"/>
</bean>

<!--持久化,集群schedule工厂配置信息,实际可以在classpath下附加quartz.properties定义这些属性值 -->
<bean id="scheduleFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">PharmaskyClusteredScheduler</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">25</prop>
<prop key="org.quartz.threadPool.threadPriority">5</prop>
<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
<prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.jobStore.clusterCheckinInterval">20000</prop>
</props>
</property>
<property name="triggers">
<list>
<ref local="orderConversionCronTrigger"/>
</list>
</property>
</bean>

<!--固定jobDetail, org.quartz.JobDetail类型的JobDetail必须实现指定接口方法来执行job-->
<bean id="autoOrderStatusConversionJob" class="org.quartz.JobDetail ">
<property name="jobClass">
<value>com.infowarelab.pharmasky.service.schedule.job.HisAutoOrderConversionJob</value>
</property>
<property name="name" value="PMS-SYS-JOB-HIS-ORDER-CONVERSION"/>
<property name="group" value="PMS-GROUP"/>
<property name="requestsRecovery" value="true"/>
</bean>

<!--job触发器,绑定上面的jobDetail -->
<bean id="orderConversionCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="beanName" value="PMS-SYS-JOB-HIS-ORDER-CONVERSION-Trigger"/>
<property name="jobDetail" ref="autoOrderStatusConversionJob" />
<property name="cronExpression" value="0 0/20 * * * ?" />
<property name="timeZone" ref="GMTZone"/>
</bean>
</beans>
2.ScheduleManager.java动态管理schedule工具类

spring&quartz的项目施用总结spring&quartz的项目施用总结
<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->spring&quartz的项目施用总结package com.infowarelab.pharmasky.service.schedule;
spring&quartz的项目施用总结
spring&quartz的项目施用总结
import java.text.ParseException;
spring&quartz的项目施用总结
import java.util.ArrayList;
spring&quartz的项目施用总结
import java.util.Date;
spring&quartz的项目施用总结
import java.util.List;
spring&quartz的项目施用总结
spring&quartz的项目施用总结
import org.apache.commons.lang.StringUtils;
spring&quartz的项目施用总结
import org.quartz.CronTrigger;
spring&quartz的项目施用总结
import org.quartz.JobDetail;
spring&quartz的项目施用总结
import org.quartz.Scheduler;
spring&quartz的项目施用总结
import org.quartz.SchedulerException;
spring&quartz的项目施用总结
import org.quartz.Trigger;
spring&quartz的项目施用总结
spring&quartz的项目施用总结
import com.infowarelab.common.log.Log;
spring&quartz的项目施用总结
import com.infowarelab.common.log.LogFactory;
spring&quartz的项目施用总结
import com.infowarelab.pharmasky.util.Config;
spring&quartz的项目施用总结
spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
public class ScheduleManager spring&quartz的项目施用总结 {
spring&quartz的项目施用总结
spring&quartz的项目施用总结
private static final Loglog = LogFactory.getLog(ScheduleManager. class );
spring&quartz的项目施用总结
spring&quartz的项目施用总结
private Schedulerscheduler;
spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
public void start() throws SchedulerException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler.isShutdown() || scheduler.isInStandbyMode()) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler.start();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
public void pause() throws SchedulerException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler.isStarted()) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler.standby();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
public void stop() throws SchedulerException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler.isStarted() || scheduler.isInStandbyMode()) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler.shutdown();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
public ListlistJobDetails() throws SchedulerException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 ListrstList
= new ArrayList < JobDetail > ();
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 String[]groupNames
= scheduler.getJobGroupNames();
spring&quartz的项目施用总结 log.info(
" [INFO]thegroupsincurrentscheduleris: "
spring&quartz的项目施用总结
+ groupNames.length);
spring&quartz的项目施用总结spring&quartz的项目施用总结
for ( int i = 0 ;i < groupNames.length;i ++ ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 String[]jobNames
= scheduler.getJobNames(groupNames[i]);
spring&quartz的项目施用总结spring&quartz的项目施用总结
for ( int j = 0 ;j < jobNames.length;j ++ ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 JobDetailjobDetail
= scheduler.getJobDetail(jobNames[j],
spring&quartz的项目施用总结 groupNames[i]);
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (jobDetail != null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 rstList.add(jobDetail);
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
return rstList;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结
public JobDetailgetJobDetail(StringjobName,StringjobGroupName)
spring&quartz的项目施用总结spring&quartz的项目施用总结
throws SchedulerException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 JobDetailjob
= scheduler.getJobDetail(jobName,jobGroupName);
spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (job == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 log.info(
" [INFO]noneobjectrelativethejobName: " + jobName
spring&quartz的项目施用总结
+ " andjobGroupName: " + jobGroupName);
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
return job;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结
public List < JobDetail > getJobDetailByGroup(StringjobGroupName)
spring&quartz的项目施用总结spring&quartz的项目施用总结
throws SchedulerException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 List
< JobDetail > list = new ArrayList < JobDetail > ();
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 String[]jobNames
= scheduler.getJobNames(jobGroupName);
spring&quartz的项目施用总结
spring&quartz的项目施用总结 log.debug(
" [DEBUG]jobNameswith/ "" +jobGroupName
spring&quartz的项目施用总结
+ " / " asgroupName: " +jobNames);
spring&quartz的项目施用总结

spring&quartz的项目施用总结spring&quartz的项目施用总结
for ( int i = 0 ;i < jobNames.length;i ++ ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 JobDetailjobDetail
= getJobDetail(jobNames[i],jobGroupName);
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (jobDetail != null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 list.add(jobDetail);
spring&quartz的项目施用总结spring&quartz的项目施用总结 }
else spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 log
spring&quartz的项目施用总结 .debug(
" [DEBUG]JobDetailwith{/ ""
spring&quartz的项目施用总结
+ jobNames[i]
spring&quartz的项目施用总结
+ " / " ,/ ""
spring&quartz的项目施用总结
+ jobGroupName
spring&quartz的项目施用总结
+ " / " }
asthejobNameandjobGroupNamecannotbefound ! " );
spring&quartz的项目施用总结
}

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
return list;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结
public boolean addJobDetail(JobDetailjobDetail,StringcronExpress)
spring&quartz的项目施用总结spring&quartz的项目施用总结
throws SchedulerException,ParseException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结spring&quartz的项目施用总结
if (jobDetail != null && cronExpress != null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结
spring&quartz的项目施用总结 Triggertrigger
= new CronTrigger(jobDetail.getName(),jobDetail.getGroup(),
spring&quartz的项目施用总结 jobDetail.getName(),jobDetail.getGroup(),cronExpress);
spring&quartz的项目施用总结
spring&quartz的项目施用总结 DatejobDate
= scheduler.scheduleJob(jobDetail,trigger);
spring&quartz的项目施用总结 log
spring&quartz的项目施用总结 .info(
" [INFO]jobDetail: "
spring&quartz的项目施用总结
+ jobDetail.getFullName()
spring&quartz的项目施用总结
+ " hasbeenaddedintothescheduler,andthefirstFiredTimeis: "
spring&quartz的项目施用总结
+ jobDate);
spring&quartz的项目施用总结
return (jobDate == null ) ? false : true ;
spring&quartz的项目施用总结spring&quartz的项目施用总结 }
else spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 log
spring&quartz的项目施用总结 .info(
" [INFO]addjobDetailfailure,theparametersonjobDetailortriggerhasnullvalue! " );
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
return false ;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结
public Trigger[]getJobTrigger(StringjobName,StringjobGroupName)
spring&quartz的项目施用总结spring&quartz的项目施用总结
throws SchedulerException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
return scheduler.getTriggersOfJob(jobName,jobGroupName);
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
public List < Trigger > listTrigger() throws SchedulerException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 List
< Trigger > triggerList = new ArrayList < Trigger > ();
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 String[]triggerGroupNames
= scheduler.getTriggerGroupNames();
spring&quartz的项目施用总结 log
spring&quartz的项目施用总结 .info(
" [INFO]thetriggergroupsamountswhichisregistedwithinthesystemis: "
spring&quartz的项目施用总结
+ triggerGroupNames.length);
spring&quartz的项目施用总结spring&quartz的项目施用总结
for (StringtriggerGroupName:triggerGroupNames) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (triggerGroupName != null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 String[]triggerNames
= scheduler
spring&quartz的项目施用总结 .getTriggerNames(triggerGroupName);
spring&quartz的项目施用总结spring&quartz的项目施用总结
for (StringtriggerName:triggerNames) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 Triggertrigger
= scheduler.getTrigger(triggerName,
spring&quartz的项目施用总结 triggerGroupName);
spring&quartz的项目施用总结
if (trigger != null
spring&quartz的项目施用总结
&& scheduler.getTriggerState(triggerName,
spring&quartz的项目施用总结spring&quartz的项目施用总结 triggerGroupName)
== Trigger.STATE_NORMAL) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 triggerList.add(trigger);
spring&quartz的项目施用总结spring&quartz的项目施用总结 }
else spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 log.info(
" [INFO]thetrigger: "
spring&quartz的项目施用总结
+ ((trigger == null ) ? trigger.getFullName()
spring&quartz的项目施用总结 :
" null " ) + " ,notexists "
spring&quartz的项目施用总结
+ " orhasthenotnormalstatus " );
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
return triggerList;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结
public boolean reScheduleJob(StringjobName,StringjobGroupName,
spring&quartz的项目施用总结spring&quartz的项目施用总结 StringcomputedStr)
throws SchedulerException,ParseException spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
if (scheduler == null ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 scheduler
= getScheduler();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结 TriggernewTrigger
= new CronTrigger(jobName,jobGroupName,jobName,
spring&quartz的项目施用总结 jobGroupName,computedStr);
spring&quartz的项目施用总结
spring&quartz的项目施用总结 newTrigger.setJobName(jobName);
spring&quartz的项目施用总结 newTrigger.setJobGroup(jobGroupName);
spring&quartz的项目施用总结
spring&quartz的项目施用总结
spring&quartz的项目施用总结 DatetriggerDate
= scheduler.rescheduleJob(jobName,jobGroupName,newTrigger);
spring&quartz的项目施用总结 log.info(
" [INFO]thejob " + jobName
spring&quartz的项目施用总结
+ " hasbeenupdatetofiredon: " + triggerDate);
spring&quartz的项目施用总结
spring&quartz的项目施用总结
return (triggerDate == null ) ? false : true ;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
public StringgenScheduleTimeStr( byte type,Shortspring&quartz的项目施用总结 scheduleTimeParams) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 Stringpattern
= null ; // variableforcronexpress
spring&quartz的项目施用总结spring&quartz的项目施用总结
switch (type) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结
case 1 :
spring&quartz的项目施用总结
// autoordercreationjob,theparameterturnis:weekInterval,
spring&quartz的项目施用总结
// weekday,hour,minute
spring&quartz的项目施用总结
// "0minutehour?*weekDay/weekInterval"
spring&quartz的项目施用总结
pattern = Config
spring&quartz的项目施用总结 .getString(
" schedule.cron.express.his.order.creation " );
spring&quartz的项目施用总结 log.info(
" [INFO]partternforhisordercreationcronexpress: "
spring&quartz的项目施用总结
+ pattern);
spring&quartz的项目施用总结spring&quartz的项目施用总结
for ( int i = 0 ;i < scheduleTimeParams.length;i ++ ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
switch (i) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结
case 0 : // minute
spring&quartz的项目施用总结
pattern = StringUtils.replace(pattern, " minute " ,
spring&quartz的项目施用总结 scheduleTimeParams[
0 ].toString());
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 1 : // hour
spring&quartz的项目施用总结
pattern = StringUtils.replace(pattern, " hour " ,
spring&quartz的项目施用总结 scheduleTimeParams[
1 ].toString());
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 2 : // weekDay
spring&quartz的项目施用总结
pattern = StringUtils.replace(pattern, " weekDay " ,
spring&quartz的项目施用总结 getWeekIdentify(scheduleTimeParams[
2 ]));
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 3 : // weekInterval
spring&quartz的项目施用总结
pattern = StringUtils.replace(pattern, " weekInterval " ,
spring&quartz的项目施用总结 scheduleTimeParams[
3 ].toString());
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
default :
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
spring&quartz的项目施用总结
case 2 :
spring&quartz的项目施用总结
// hisstocksyncjob,theparameterturnis:dayInterval,hour,
spring&quartz的项目施用总结
// minute
spring&quartz的项目施用总结
// "0minutehour*/dayInterval*?"
spring&quartz的项目施用总结
pattern = Config.getString( " schedule.cron.express.his.stock.sync " );
spring&quartz的项目施用总结 log.info(
" [INFO]partternforhisordercreationcronexpress: "
spring&quartz的项目施用总结
+ pattern);
spring&quartz的项目施用总结spring&quartz的项目施用总结
for ( int i = 0 ;i < scheduleTimeParams.length;i ++ ) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结spring&quartz的项目施用总结
switch (i) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结
case 0 : // minute
spring&quartz的项目施用总结
pattern = StringUtils.replace(pattern, " minute " ,
spring&quartz的项目施用总结 scheduleTimeParams[
0 ].toString());
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 1 : // hour
spring&quartz的项目施用总结
pattern = StringUtils.replace(pattern, " hour " ,
spring&quartz的项目施用总结 scheduleTimeParams[
1 ].toString());
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 2 : // dayInterval
spring&quartz的项目施用总结
pattern = StringUtils.replace(pattern, " dayInterval " ,
spring&quartz的项目施用总结 scheduleTimeParams[
2 ].toString());
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
default :
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
spring&quartz的项目施用总结
default :
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结 log.info(
" [INFO]schedulejobcronexpressis: " + pattern);
spring&quartz的项目施用总结
return (pattern == null ) ? null :pattern.trim();
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
/***/ /** ********************************************************************** */
spring&quartz的项目施用总结spring&quartz的项目施用总结
/***/ /** helpermethodorgettersandsetters* */
spring&quartz的项目施用总结spring&quartz的项目施用总结
/***/ /** ********************************************************************** */
spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
/***/ /**
spring&quartz的项目施用总结 *gettheweekday'sidentifylike"SUN","MON"andsoon.Inthismethod
spring&quartz的项目施用总结 *thedata"1"equals"SUN",sothe"7"equals"SAT";
spring&quartz的项目施用总结 *
spring&quartz的项目施用总结 *
@param short
spring&quartz的项目施用总结 *thenumericdataforweekday
spring&quartz的项目施用总结 *
@return Stringtheweekdayidentifywithcorrectnumericdata
spring&quartz的项目施用总结
*/

spring&quartz的项目施用总结spring&quartz的项目施用总结
private StringgetWeekIdentify( short weekDay) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结 Stringvalue
= null ;
spring&quartz的项目施用总结spring&quartz的项目施用总结
switch (weekDay) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结
case 1 :
spring&quartz的项目施用总结 value
= " SUN " ;
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 2 :
spring&quartz的项目施用总结 value
= " MON " ;
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 3 :
spring&quartz的项目施用总结 value
= " TUE " ;
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 4 :
spring&quartz的项目施用总结 value
= " WED " ;
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 5 :
spring&quartz的项目施用总结 value
= " THU " ;
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 6 :
spring&quartz的项目施用总结 value
= " FRI " ;
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
case 7 :
spring&quartz的项目施用总结 value
= " SAT " ;
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结
default :
spring&quartz的项目施用总结
break ;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
return value;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
public SchedulergetScheduler() spring&quartz的项目施用总结 {
spring&quartz的项目施用总结
return scheduler;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结
spring&quartz的项目施用总结spring&quartz的项目施用总结
public void setScheduler(Schedulerscheduler) spring&quartz的项目施用总结 {
spring&quartz的项目施用总结
this .scheduler = scheduler;
spring&quartz的项目施用总结 }

spring&quartz的项目施用总结 }
spring&quartz的项目施用总结

 

情景二:单机部署,固定触发规则多个schedule,不用持久化
1.spring-schedule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<!-- Job Bean -->
<bean name="autoOrderAuditService" class="com.infowarelab.sam.service.job.AutoOrderAuditService"></bean>
<bean name="sendAuditedOrderService" class="com.infowarelab.sam.service.job.SendAuditedOrderService"></bean>

<!-- Job由于以上job bean具有相同的触发规则,所以统一集中在这个管理器执行-->
<bean id="timerJobManagerJob" class="com.infowarelab.sam.service.job.SamJobManager" autowire="no">
<property name="tasks">
<list>
<ref bean="autoOrderAuditService"/>
<ref bean="sendAuditedOrderService"/>
</list>
</property>
<property name="samBaseInfoService" ref="samBaseInfoService"></property>
</bean>

<bean id="timerJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean " autowire="no">
<property name="targetObject" ref="timerJobManagerJob" />
<property name="targetMethod" value="jobExpires" />
</bean>

<bean id="timerCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" autowire="no">
<property name="jobDetail" ref="timerJobDetail" />
<property name="cronExpression">
<value>0 0/15 * * * ?</value>
</property>
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
<property name="triggers">
<list>
<ref bean="timerCronTrigger" />
</list>
</property>
</bean>
</beans>

 

参考资料:
cronExpression表达式:
http://hi.baidu.com/the_space_of_programmer/blog/item/725759f78d383e27720eec80.html (cronExpression
quartz介绍:
http://hi.baidu.com/alliance_alex/blog/item/5c998d64241173f2f73654b0.html
集群及quartz配置说明:
http://hi.baidu.com/jiangyou001/blog/item/5196d990862d5789a977a4af.html
http://gocom.primeton.com/modules/newbb/forumtopic19180_9963_40.htm