Quartz实现执行任务记录数据库,方便计算任务的执行次数以及成功次数

本文介绍了一个自定义的任务执行详情类JobExecuteDetail,用于记录任务执行的名称、组名、成功次数和执行时间。同时,通过SerializableQuartzJobBean类实现了任务执行后的细节记录,并将这些信息存储到自定义的JobExecuteDetailQueue队列中,以便后续可以将队列中的数据存入数据库进行管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务执行实体

/** 
 * 任务执行情况详情
 */
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 + "]";
    }
}

 

执行的任务记录到队列, 

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;
    }
}

 

从队列中取出任务执行的内容存入数据库即可

转载于:https://www.cnblogs.com/Cassie-wang/p/10973232.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值