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;
/**
 * 客户端长连接断开任务调度工厂类
 * @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("客户端长连接断开定时任务开始执行,任务名称[" + 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;
/**
 * 客户端长连接断开任务调度管理类
 * @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("初始化客户端长连接断开任务调度");
        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("初始化客户端长连接断开任务调度异常!" + 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 定时任务信息
     * @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-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.resumeJob(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.resumeTrigger(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> 
时间: 2024-07-30 15:12:01

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

webmagic采集CSDN的Java_WebDevelop页面

项目中使用到了webmagic,采集论坛一类的页面时需要一些特殊的配置.在此记录一下 先来看看我要采集的页面 点击第2页可以看到它的url是http://bbs.csdn.net/forums/Java_WebDevelop?page=2 点击尾页可以看到它的url是http://bbs.csdn.net/forums/Java_WebDevelop?page=758 也就是说我们需要采集的范围是从2到758页 这样我们就可以通过自己拼接一个url来模拟所有 的连接了代码如下: <span st

spring定时任务包Quartz版本不兼容

使用spring定时任务包Quartz时,必须使用Quartz1.85以下版本的.     查看发现spring3.0.5中org.springframework.scheduling.quartz.CronTriggerBean继承了     org.quartz.CronTrigger(public class CronTriggerBeanextends CronTrigger),     而在quartz2.1.3中org.quartz.CronTrigger是个接口(publicabs

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

在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类.很显然,第二种方式远比第一种方式来的灵活. 测试环境 Spring3 M2 quartz-2.1.7 我们要达到这样的效果 public class CancelUnpaidOrderTask implements Job { @Autowired private AppOrderService orderService; @Over

Spring3.0实现REST实例

Spring3.0实现REST实例 这是一个rest风格的访问,Spring从3.0开始将全面支持rest.不得不感叹Spring的强悍. 项目结构: 第一步永远是配置,使用框架永远都是先有配置,在web.xml中的配置: [xhtml] view plaincopy <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://

springMVC+Hibernate3+spring3整合实例,附带基本权限功能及CURD例子

实例说明: 1.本实例的架子是在2012年为了真实项目的开发搭建的,目前已经在此架子上做了几个中小项目.分为两个不同的版本,一个是Hibernate版本,一个是ibatis版本. 2.本实例是一个SSH的完整的架子,包括了基本的权限管理及CURD的例子.权限管理包括用户管理,菜单管理,角色管理,权限分配等.CURD的例子包括了基本的CURD以及分页功能,可以做为代码复制的例子,只专为新手学习编写的. 3..在本实例的架子上已经开发了几个中小项目,系统技术架构为springMVC+Hibernat

Quartz入门实例13-spirng4和quartz2实现动态任务调用

pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <model

SpringMVC+Spring3+hibernate4 开发环境搭建以及一个开发实例教程

刚刚接触了SpringMVC这个框架,因此有必要把它拿过来同hibernate.Spring框架进行集成和开发一个实例,在真正企业从头开发的项目中往往一个稳定的开发环境至关重要,开发一个项目选择什么样的搭建平台也需要有经验才可以,并不是说你会搭建一个开发平台然后公司就会用你搭建的开发平台,一个项目或者一个公司看中的也不是你可以搭出框架,而是在这个框架使用过程中出现的各种问题你可以解决掉. 也就是说呢,无论开发什么项目要做到稳定.环境稳定.开发成本稳定.技术稳定.换句话说就是"风险可控"

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

Quartz是一款定时任务调度的开源框架,使用起来比较方便.并且Spring的support包对Quartz有集成.但是笔者在web应用使用的过程中却遇到了内存泄漏的问题. 问题的产生 笔者在使用Spring+Quartz的用法如下(熟悉Spring+Quartz的可以跳过直接看问题): 1.配置Scheduler工厂 <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.Sch

spring3.1.3+quartz1.8 集群 (spring3+quartz2.2试验)

我们系统中原有的基于spring3自带的task,并使用注解方式制定调度策略.单由于需求需要动态定制添加.修改.删除任务.spring自带的task无法满足需求.所以考虑使用spring+quartz.网上很多人说spring3+才能使用quartz2.+的版本,正好我们使用的spring版本为spring 3+,所以兴冲冲的使用了quartz-2.2.1的最新版本.通过搭建环境测试完美解决了动态定制任务的需求.参考(http://www.meiriyouke.net/?p=140),本文不详细