/**
* 任务调度类
* @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>

Spring3和Quartz2的应用实例的更多相关文章

  1. Spring3 整合Quartz2 实现定时任务

    一.Quartz简介 Quartz是一个由James House创立的开源项目,是一个功能强大的作业调度工具,可以计划的执行任务,定时.循环或在某一个时间来执行我们需要做的事,这可以给我们工作上带来很 ...

  2. Spring3 M2 quartz-2.1.7 解决bean不能注入问题

    我们要达到这样的效果 public class CancelUnpaidOrderTask implements Job { @Autowired private AppOrderService or ...

  3. Quartz动态添加,修改,删除任务(暂停,任务状态,恢复,最近触发时间)

    首页 博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 小程序 消息 登录注册 关闭 quartz_Cron表达式一分钟教程 09-05 ...

  4. Quartz与Spring集成 Job如何自动注入Spring容器托管的对象

    在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类.很显然,第二种方式远比第一种方式来的 ...

  5. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  6. Spring-3.2.5 + Quartz-2.2.1 集群实例(Tomcat+Memcached+Quartz集群session共享)

    本例中我启动了两个Tomcat作效果测试,先看效果图: 现在我们关闭一个Tomcat 注意红线的位置和设置的参数有关 #org.quartz.jobStore.clusterCheckinInterv ...

  7. Spring4 + Quartz-2.2.0集成实例

    Spring3.0不支持Quartz2.0,因为org.quartz.CronTrigger在2.0从class变成了一个interface造成IncompatibleClassChangeError ...

  8. spring3.2.8+quartz2.2.0(比较全,对比quartz1.x的配置)

    spring3.2.8 + quartz2.2.0报错: java.lang.IncompatibleClassChangeError: class org.springframework.sched ...

  9. Spring3.2.11与Quartz2.2.1整合时内存泄漏的问题的解决

    Quartz是一款定时任务调度的开源框架,使用起来比较方便.并且Spring的support包对Quartz有集成.但是笔者在web应用使用的过程中却遇到了内存泄漏的问题. 问题的产生 笔者在使用Sp ...

随机推荐

  1. (转载)CentOS 6.5使用aliyun镜像来源

    (原地址:http://www.linuxidc.com/Linux/2014-09/106675.htm) 当我们把CentOS 6.5安装好以后,可以使用这个脚本来使用国内的阿里云镜像源 #!/b ...

  2. 挑战程序竞赛例题 4.1 Random Walk(高斯消元求期望值)

    给你一幅N*M的地图,地图中有不能到达的障碍物'#'与可以走的点'.',从(1,1)开始走到(N,M),其中每一次走动均等概率地向周围的可达的格子走去,求到达(N,M)的期望步数.(N,M<=1 ...

  3. js处理浮点数计算误差

    众所周知,浮点计算会产生舍入误差的问题,比如,0.1+0.2,结果应该是0.3,但是计算的结果并不是如此,而是0.30000000000000004,这是使用基于IEEE754数值的浮点计算的通病,j ...

  4. BZOJ3203 保护出题人(defend)

    保护出题人(defend) 题目描述 输入 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离. 接下来n行每行两个空格隔开的正整数,第i + 1行为 a i和 x i,分别表示相比上一 ...

  5. nodeJS学习(8)--- WS/...开发 NodeJS 项目-节3 <使用 mongodb 完整实例过程>

    使用 mongodb 的小系统 参考:https://my.oschina.net/chenhao901007/blog/312367 1. Robomongo 创建项目的数据库和数据表 参考:htt ...

  6. react当中子组件改变父组件的状态

    子组件直接改变父组件传入的props值是不被允许的, 当需要在子组件当中改变父组件的某一个状态, 父组件传入一个改变状态的函数,然后在子组件当中调用函数即可

  7. cf 512D - Fox And Travelling

    题目大意 给定一颗\(n\le 100\)个点的图,可以进行随机游走,求游走\(k=0...n\)个点的方案数 游走的规则是:每次只能访问一个度数\(\le 1\)的点,并将其删除 分析 看完傻眼 问 ...

  8. linux之eval

    1. eval command-line 其中command-line是在终端上键入的一条普通命令行.然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次.如: pipe=&qu ...

  9. 【CF1073D】Berland Fair(模拟)

    题意:初始有t元,每次从1开始买,从1到n依次有n个人,每个人的东西价格为a[i],该人依次能买就买,到n之后再回到1从头开始,问最后能买到的东西数量 n<=2e5,t<=1e18,a[i ...

  10. HDU 3853 LOOPS 概率DP入门

    LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Total Sub ...