Spring整合quartz配置

一 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");
		}
	}
}


如有疑问留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值