当前位置: 首页 > news >正文

Spring3和Quartz2的应用实例

/**
 * 任务调度类
 * @author Joyce.Luo
 * @date 2015-3-31 下午03:32:04
 * @version V3.0
 * @since Tomcat6.0,Jdk1.6
 * @copyright Copyright (c) 2015
 */
public class QuartzJob {
    /**
     * 任务ID
     */
    private Integer jobId;
    /**
     * 任务名称
     */
    private String jobName;
    /**
     * 任务分组
     */
    private String jobGroup;
    /**
     * 任务状态 0禁用 1启用 2删除
     */
    private Integer jobStatus;
    /**
     * 任务执行时间表达式
     */
    private String cronExpression;
    /**
     * @return the jobId
     */
    public Integer getJobId() {
        return jobId;
    }
    /**
     * @param jobId
     *            the jobId to set
     */
    public void setJobId(Integer jobId) {
        this.jobId = jobId;
    }
    /**
     * @return the jobName
     */
    public String getJobName() {
        return jobName;
    }
    /**
     * @param jobName
     *            the jobName to set
     */
    public void setJobName(String jobName) {
        this.jobName = jobName;
    }
    /**
     * @return the jobGroup
     */
    public String getJobGroup() {
        return jobGroup;
    }
    /**
     * @param jobGroup
     *            the jobGroup to set
     */
    public void setJobGroup(String jobGroup) {
        this.jobGroup = jobGroup;
    }
    /**
     * @return the jobStatus
     */
    public Integer getJobStatus() {
        return jobStatus;
    }
    /**
     * @param jobStatus
     *            the jobStatus to set
     */
    public void setJobStatus(Integer jobStatus) {
        this.jobStatus = jobStatus;
    }
    /**
     * @return the cronExpression
     */
    public String getCronExpression() {
        return cronExpression;
    }
    /**
     * @param cronExpression
     *            the cronExpression to set
     */
    public void setCronExpression(String cronExpression) {
        this.cronExpression = cronExpression;
    }
}



import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.hupu.nac.biz.IAuthPolicyClientBiz;
/**
 * client长连接断开任务调度工厂类
 * @author Joyce.Luo
 * @date 2015-3-31 下午03:38:35
 * @version V3.0
 * @since Tomcat6.0,Jdk1.6
 * @copyright Copyright (c) 2015
 */
public class LinkDisconnectQuartzJobFactory implements Job {
    private static final Logger logger = Logger.getLogger(LinkDisconnectQuartzJobFactory.class);
    
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        QuartzJob scheduleJob = (QuartzJob)context.getMergedJobDataMap().get("linkDisconnectJob");
        logger.info("client长连接断开定时任务開始运行,任务名称[" + scheduleJob.getJobName() + "]");
    }
}


import org.apache.log4j.Logger;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdScheduler;

/**
 * client长连接断开任务调度管理类
 * @author Joyce.Luo
 * @date 2015-3-31 下午03:42:30
 * @version V3.0
 * @since Tomcat6.0,Jdk1.6
 * @copyright Copyright (c) 2015
 */
public class LinkDisconnectQuartzManager {
    private static final Logger logger = Logger.getLogger(LinkDisconnectQuartzManager.class);
    private StdScheduler scheduler;
    
    /**
     * @param scheduler the scheduler to set
     */
    public void setScheduler(StdScheduler scheduler) {
        this.scheduler = scheduler;
    }
    
    /**
     * 初始化任务调度
     * @author Joyce.Luo
     * @date 2015-3-31 下午03:48:55
     * @version V3.0
     * @since Tomcat6.0,Jdk1.6
     * @copyright Copyright (c) 2015
     */
    public void initJob(){
        logger.info("初始化client长连接断开任务调度");
        QuartzJob job = new QuartzJob();
        job.setJobName("link_disconnect_job");
        job.setJobGroup("link_disconnect_group");
        job.setJobStatus(1);
        job.setCronExpression("0 0/1 * * * ?");
        try {
            TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup());
            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
            if (null == trigger) {
                addQuartzJob(job, trigger);
            }
        } catch (Exception e) {
            logger.error("初始化client长连接断开任务调度异常!" + e.getMessage(), e);
        }
    }
    
    /**
     * 向任务调度中加入定时任务
     * @param job 定时任务信息
     * @param trigger 定时调度触发器
     * @author Joyce.Luo
     * @date 2015-3-31 下午04:04:58
     * @version V3.0
     * @since Tomcat6.0,Jdk1.6
     * @copyright Copyright (c) 2015
     */
    private void addQuartzJob(QuartzJob job, CronTrigger trigger){
        logger.info("向任务调度中加入定时任务");
        try {
            JobDetail jobDetail = JobBuilder.newJob(LinkDisconnectQuartzJobFactory.class)
                .withIdentity(job.getJobName(), job.getJobGroup()).build();
            jobDetail.getJobDataMap().put("linkDisconnectJob", job);
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
            trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup())
                .withSchedule(scheduleBuilder).build();
            scheduler.scheduleJob(jobDetail, trigger);
        } catch (Exception e) {
            logger.error("向任务调度中加入定时任务异常!" + e.getMessage(), e);
        }
    }
    
    /**
     * 马上执行定时任务
     * @param job 定时任务信息
     * @author Joyce.Luo
     * @date 2015-4-20 下午02:08:41
     * @version V3.0
     * @since Tomcat6.0,Jdk1.6
     * @copyright Copyright (c) 2015
     */
    void runJob(QuartzJob job){
        logger.info("马上执行任务调度中的定时任务");
        try {
            if (null == job) {
                logger.info("定时任务信息为空,无法马上执行");
                return;
            }
            JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());
            if(null == jobKey){
                logger.info("任务调度中不存在[" + job.getJobName() + "]定时任务,不予马上执行!");
                return;
            }
            scheduler.triggerJob(jobKey);
        } catch (Exception e) {
            logger.error("马上执行任务调度中的定时任务异常!

" + e.getMessage(), e);         }     }          /**      * 改动任务调度中的定时任务      * @param job 定时任务信息      * @param triggerKey 定时调度触发键      * @param trigger 定时调度触发器      * @author Joyce.Luo      * @date 2015-3-31 下午04:16:54      * @version V3.0      * @since Tomcat6.0,Jdk1.6      * @copyright Copyright (c) 2015      */     void updateQuartzJob(QuartzJob job, TriggerKey triggerKey, CronTrigger trigger){         logger.info("改动任务调度中的定时任务");         try {             if (null == job || null == triggerKey || null == trigger) {                 logger.info("改动调度任务參数不正常!");                 return;             }             logger.info("原始任务表达式:" + trigger.getCronExpression()                     + "。如今任务表达式:" + job.getCronExpression());             if (trigger.getCronExpression().equals(job.getCronExpression())) {                 logger.info("任务调度表达式一致,不予进行改动!

");                 return;             }             logger.info("任务调度表达式不一致,进行改动");             CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());             trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();             scheduler.rescheduleJob(triggerKey, trigger);         } catch (Exception e) {             logger.error("改动任务调度中的定时任务异常!

" + e.getMessage(), e);         }     }          /**      * 暂停任务调度中的定时任务      * @param job 定时任务信息      * @author Joyce.Luo      * @date 2015-4-20 下午02:22:53      * @version V3.0      * @since Tomcat6.0,Jdk1.6      * @copyright Copyright (c) 2015      */     void pauseJob(QuartzJob job){         logger.info("暂停任务调度中的定时任务");         try {             if (null == job) {                 logger.info("暂停调度任务參数不正常!

");                 return;             }             JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());             if(null == jobKey){                 logger.info("任务调度中不存在[" + job.getJobName() + "]定时任务。不予进行暂停!");                 return;             }             scheduler.pauseJob(jobKey);         } catch (Exception e) {             logger.error("暂停任务调度中的定时任务异常!" + e.getMessage(), e);         }     }          /**      * 恢复任务调度中的定时任务      * @param job 定时任务信息      * @author Joyce.Luo      * @date 2015-4-20 下午02:26:08      * @version V3.0      * @since Tomcat6.0,Jdk1.6      * @copyright Copyright (c) 2015      */     void resumeJob(QuartzJob job){         logger.info("恢复任务调度中的定时任务");         try {             if (null == job) {                 logger.info("恢复调度任务參数不正常!

");                 return;             }             JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());             if(null == jobKey){                 logger.info("任务调度中不存在[" + job.getJobName() + "]定时任务。不予进行恢复。");                 return;             }             scheduler.resumeJob(jobKey);         } catch (Exception e) {             logger.error("恢复任务调度中的定时任务异常!" + e.getMessage(), e);         }     }          /**      * 删除任务调度中的定时任务      * @param job 定时任务信息      * @author Joyce.Luo      * @date 2015-3-31 下午04:30:03      * @version V3.0      * @since Tomcat6.0,Jdk1.6      * @copyright Copyright (c) 2015      */     void deleteJob(QuartzJob job){         logger.info("删除任务调度中的定时任务");         try {             if (null == job) {                 logger.info("删除调度任务參数不正常!");                 return;             }             JobKey jobKey = JobKey.jobKey(job.getJobName(), job.getJobGroup());             if(null == jobKey){                 logger.info("任务调度中不存在[" + job.getJobName() + "]定时任务,不予进行删除!

");                 return;             }             scheduler.deleteJob(jobKey);         } catch (Exception e) {             logger.error("删除任务调度中的定时任务异常。" + e.getMessage(), e);         }     }          /**      * 删除任务调度定时器      * @param triggerKey      * @author Joyce.Luo      * @date 2015-3-31 下午04:35:33      * @version V3.0      * @since Tomcat6.0,Jdk1.6      * @copyright Copyright (c) 2015      */     void deleteJob(TriggerKey triggerKey){         logger.info("删除任务调度定时器");         try {             if(null == triggerKey){                 logger.info("停止任务定时器參数不正常。不予进行停止!

");                 return;             }             logger.info("停止任务定时器");             scheduler.pauseTrigger(triggerKey);             scheduler.unscheduleJob(triggerKey);         } catch (Exception e) {             logger.info("删除任务调度定时器异常!

" + e.getMessage() ,e);         }     } }



<bean id="linkDisconnectScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" />
    
<bean id="linkDisconnectQuartzManager" class="com.hupu.nac.timertask.LinkDisconnectQuartzManager" init-method="initJob">
    <property name="scheduler" ref="linkDisconnectScheduler"></property>
</bean> 


相关文章:

  • Linux 命令一句话
  • 调查:中国互联网公司数据库访问层现状
  • C++程序设计:原理与实践(进阶篇)17.4 使用GUI库
  • xDAIS C++
  • 《PHP和MySQL Web开发从新手到高手(第5版)》一2.6 将数据插入到表中
  • 性能调优工具类MyStopwatch
  • MYSQL5 注射技巧笔记
  • 对于MeeGo你所需了解的......
  • RHEL5.5 更新Firefox
  • Visual C++ MFC 中常用宏的含义
  • 《大数据管理概论》一第1章概  述1.1 大数据的基本概念
  • table表格的常用功能
  • 《JavaScript面向对象编程指南》——2.4 基本数据类型综述
  • {转}Java 理论与实践: 正确使用 Volatile 变量
  • 《iOS 8案例开发大全》——实例009 启动模拟器
  • [nginx文档翻译系列] 控制nginx
  • JavaScript中的对象个人分享
  • PhantomJS 安装
  • React系列之 Redux 架构模式
  • Vue 重置组件到初始状态
  • vue--为什么data属性必须是一个函数
  • 如何设计一个微型分布式架构?
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 微信小程序实战练习(仿五洲到家微信版)
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • (145)光线追踪距离场柔和阴影
  • (4) PIVOT 和 UPIVOT 的使用
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (独孤九剑)--文件系统
  • (排序详解之 堆排序)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net打印*三角形
  • .net网站发布-允许更新此预编译站点
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @RequestMapping 的作用是什么?
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [20171101]rman to destination.txt
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [Android]使用Git将项目提交到GitHub
  • [BetterExplained]书写是为了更好的思考(转载)
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [English]英语积累本