zoukankan      html  css  js  c++  java
  • quartz定时任务

    本人此次在项目中使用了参考页面中提供的quartz(版本1.7.2)的第二种(作业类不继承特定基类),作业调度方式采用cronTriggerBean实现。

    项目需要一个功能是,判断任务是否正在执行,若没有正在执行则立即执行该任务

    先上实现的关键代码:

    配置文件:

     1 <bean id="mI"
     2           class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
     3         <property name="targetObject">
     4             <bean class="com.xxx.xxx.xxx.component.DetectTask" />
     5         </property>
     6         <property name="targetMethod" value="doDetect" />
     7         <property name="concurrent" value="false" /><!-- 作业不并发调度 -->
     8     </bean>
     9     <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    10         <property name="jobDetail" ref="mI" />
    11         <!--每5分钟运行一次 -->
    12         <property name="cronExpression" value="* 0/5 * * * ?" />
    13     </bean>
    14     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    15         <property name="triggers">
    16             <list>
    17                 <ref bean="cronTrigger" />
    18             </list>
    19         </property>
    20     </bean>

    Java代码:

     1 //注入相关bean
     2   @Autowired
     3     MethodInvokingJobDetailFactoryBean mI;
     4     @Autowired
     5     SchedulerFactoryBean scheduler;
     6     @Autowired
     7     CronTriggerBean cronTrigger;
     8 ...
     9 ...
    10 //逻辑代码
    11 Scheduler s = scheduler.getObject();
    12         try {
    13             if(Trigger.STATE_BLOCKED == s.getTriggerState(cronTrigger.getName(), cronTrigger.getGroup())){
    14                 commonResult.setMessage("定时任务正在执行,无需进行任何操作");
    15             }else {
    16                 JobDetail jobDetail = mI.getObject();
    17                 try {
    18                     s.triggerJob(jobDetail.getName(), jobDetail.getGroup());
    19                     commonResult.setMessage("执行探测任务~成功!");
    20                 } catch (SchedulerException e) {
    21                     e.printStackTrace();
    22                     commonResult.setMessage("失败!"+ e.getMessage());
    23                     commonResult.setSuccess(false);
    24                 }
    25             }
    26         } catch (SchedulerException e) {
    27             e.printStackTrace();
    28         }

    采用Scheduler接口的getTriggerState方法获取任务执行状态、Scheduler.triggerJog(jobName, jobGroup)立即执行任务。

    附:源码中各状态值及含义

    Trigger.STATE_NORMAL         0    普通
    Trigger.STATE_PAUSED          1    暂停
    Trigger.STATE_COMPLETE       2    完成(那一刻)
    Trigger.STATE_ERROR            3    错误   
    Trigger.STATE_BLOCKED        4    正在执行
    Trigger.STATE_NONE            -1   无状态

     quartz 1.7.2jar包及源码

     参考:Spring定时任务的几种实现方式 http://gong1208.iteye.com/blog/1773177

  • 相关阅读:
    常用正则表达式应用
    iOS 通知推送APNS
    IOS生活圈开发练习记录
    [转]定时器
    JavaScript如何在webView跳转到指点的位置
    用imageNamed加载图片产生的问题
    如何再分类中添加属性
    CADisplayLink定时器
    自定义UIBtton类后,在@implementation重写方法的作用
    CAAnimationGroup(组合动画)创建
  • 原文地址:https://www.cnblogs.com/GoQC/p/5919648.html
Copyright © 2011-2022 走看看