Quartz實現執行任務記錄數據庫,方便計算任務的執行次數以及成功次數

任務執行實體數據庫

/** 
 * 任務執行狀況詳情
 */
public class JobExecuteDetail implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 3145929362286951322L;

    /**
     * 名稱
     */
    private String triggerName;
    
    /**
     * 組名
     */
    private String triggerGroup;
    
    /**
     * 成功數
     */
    private int successTimes = 0;
    
    /**
     * 執行時間
     */
    private String date;

    public String getTriggerName() {
        return triggerName;
    }

    public void setTriggerName(String triggerName) {
        this.triggerName = triggerName;
    }

    public String getTriggerGroup() {
        return triggerGroup;
    }

    public void setTriggerGroup(String triggerGroup) {
        this.triggerGroup = triggerGroup;
    }

    public int getSuccessTimes() {
        return successTimes;
    }

    public void setSuccessTimes(int successTimes) {
        this.successTimes = successTimes;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return "JobExecuteDetail [triggerName=" + triggerName
                + ", triggerGroup=" + triggerGroup + ", successTimes=" + successTimes
                + ", date=" + date + "]";
    }
}

 

執行的任務記錄到隊列, app

JobExecuteDetailQueue是本身聲明的一個隊列
public class SerializableQuartzJobBean extends QuartzJobBean {
    static final Logger logger = LoggerFactory.getLogger(SerializableQuartzJobBean.class);
    
    @Override
    protected void executeInternal(JobExecutionContext context)
            throws JobExecutionException {
        
        JobExecuteDetail detail= new JobExecuteDetail();
        
        try {
            
            Object otargetObject = ctx.getBean(targetObject);
            
            TriggerKey key = context.getTrigger().getKey();
            
            detail.setTriggerGroup(key.getGroup());
            detail.setTriggerName(key.getName());
            detail.setDate(DateHelper.format(new Date(), "yyyy-MM-dd"));
            
            Method m = null;
            try {
                m = otargetObject.getClass().getMethod(targetMethod, new Class[] {});
                m.invoke(otargetObject, new Object[] {});
                
                detail.setSuccessTimes(1);
            } catch (SecurityException e) {
                e.printStackTrace();
                logger.error("任務調度運行出錯:", e);
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
                logger.error("任務調度運行出錯:", e);

            }
        } catch (Exception e) {
            throw new JobExecutionException(e);
        } finally {
            JobExecuteDetailQueue jobExecuteDetailQueue = ctx.getBean(JobExecuteDetailQueue.class);
            jobExecuteDetailQueue.offer(detail);
        }
        
    }

    private ApplicationContext ctx;
    public void setApplicationContext(ApplicationContext applicationContext) {
        this.ctx = applicationContext;
    }

    private String targetObject;
    public void setTargetObject(String targetObject) {
        this.targetObject = targetObject;
    }

    private String targetMethod;
    public void setTargetMethod(String targetMethod) {
        this.targetMethod = targetMethod;
    }
}

 

從隊列中取出任務執行的內容存入數據庫便可ide

相關文章
相關標籤/搜索