一 quartz Jar包
quartz-all-1.8.6.jar 在官网可以下载,不知道的请百度下下。
二 Spring配置文件
<bean id="jobDetail" class="com.zsj.shop.utils.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="quatrzTimerObject" />
<property name="targetMethod" value="doIt" />
<property name="shouldRecover" value="true" />
<property name="concurrent" value="false" />
<property name="arguments">
<list>
<ref bean="cvservice" />
<ref bean="doctorService" />
<ref bean="proconfig" />
<ref bean="smsServiceUdt" />
</list>
</property>
</bean>
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail" />
<!-- run every morning at 6 AM -->
<property name="startDelay" value="150000" />
<property name="cronExpression" value="*/5 * * * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
autowire="no">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
三 定时器实现类
package com.zsj.shop.utils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
import com.zsj.shop.model.CriticalValues;
import com.zsj.shop.model.DoctorNurse;
import com.zsj.shop.service.CVService;
import com.zsj.shop.service.DoctorService;
import com.zsj.shop.service.SmsService;
import com.zsj.shop.utils.CommonValues.HandleFlag;
import com.zsj.shop.vo.SmsSendResult;
/**
* com.zsj.shop.utils 类 <code>QuatrzTimerObject</code>
*
* <p>
* 定时任务执行类 使用Spring +Quatrz(定时调度框架) 业务执行模式是,当一个定时任务执行完成以后,再启动下一个任务 顺序执行
* </p>
*
* @author kingzuo Date 2013年8月9日
* @Description 模块描述
* @version 1.0 2013年8月9日 kingzuo 该类必须实现Serializable接口
*/
@Service("quatrzTimerObject")
public class QuatrzTimerObject implements Serializable {
private static final long serialVersionUID = -1359356905982662846L;
private static Log log = LogFactory.getLog(QuatrzTimerObject.class);
/**
*
*/
public QuatrzTimerObject() {
}
/**
* targetMethod
*/
public void doIt(CVService cvservice, DoctorService doctorService,
PropertiesCofig proconfig, SmsService smsServiceUdt) {
log.info("timer:"+(System.currentTimeMillis()/1000));
// 查询所有未处理的
List<CriticalValues> list = cvservice.queryUnHandle();
if (list != null && list.size() > 0) {
log.info("get " + list.size() + " unhandle cv");
// 处理预设的间隔时间
String inval = proconfig.getValue("cv_interval", "30");
int interval = 30;
try {
interval = Integer.valueOf(inval);
} catch (NumberFormatException e) {
log.error(e.getMessage(), e);
}
long lastSendTime = 0;
SmsSendResult result = null;
Date sendTime = null;
for (CriticalValues cvs : list) {
lastSendTime = cvs.getSendtime().getTime();
// 处理超时未处理的
if ((System.currentTimeMillis() - (interval * 60000)) > lastSendTime) {
DoctorNurse leader = doctorService.queryLeader(cvs
.getDoctorNurse().getJobnum());
sendTime = new Date(System.currentTimeMillis());
if (leader != null) {// 继续发给上级
log.info("send cv<"+cvs.getCvid()+"> to leader<"+leader.getJobnum()+">");
cvs.setDoctorNurse(leader);
cvs.setSendtime(sendTime);
//先更新数据库,更新成功再发送短信
boolean succs = cvservice.updateCVDoctor(cvs, HandleFlag.未处理);
if(succs){
log.info("update cv<"+cvs.getCvid()+"> doctor successs,then send sms");
result = smsServiceUdt.sendSms(cvs);
log.info("send cv<"+cvs.getCvid()+" to >"+leader.getPhone()+" by sms, result:"+result.toString());
}else{
log.info("update cv<"+cvs.getCvid()+"> doctor failed,may be handlestatus has been changed");
}
} else {//没有上级了,将危急值发回原系统
//先更新数据库中的状态,更新成功再发送
cvs.setIsSendBack(1);
cvs.setSendtime(sendTime);
cvs.setHandleflag(HandleFlag.已处理);
boolean is_ok = cvservice.updateBackStatus(cvs, HandleFlag.未处理);
if(is_ok){
log.info("update cv<"+cvs.getCvid()+"> back status sucess");
cvservice.sendBack(cvs);
}else{
log.info("update cv<"+cvs.getCvid()+"> back status failed");
}
}
}
}
} else {
log.info("no unhandle Critical Values found");
}
}
}
如有疑问留言。