/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.scheduling.generate.job; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.SchedulerContext; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; /** * 执行定时工作任务抽象类 * * @author 吴智俊 */ public abstract class BaseEwcmsExecutionJob implements Job { private static final Logger logger = LoggerFactory.getLogger(BaseEwcmsExecutionJob.class); public static final String SCHEDULER_CONTEXT_KEY_APPLICATION_CONTEXT = "applicationContext"; public static final String JOB_DATA_KEY_DETAILS_ID = "jobDetailsID"; protected ApplicationContext applicationContext; protected JobExecutionContext jobContext; protected SchedulerContext schedulerContext; public void execute(JobExecutionContext context) throws JobExecutionException { logger.info("定时器开始..."); try { this.jobContext = context; this.schedulerContext = jobContext.getScheduler().getContext(); this.applicationContext = (ApplicationContext) schedulerContext.get(SCHEDULER_CONTEXT_KEY_APPLICATION_CONTEXT); Long jobId = null; Trigger trigger = jobContext.getTrigger(); if (trigger != null){ JobDataMap jobDataMap = trigger.getJobDataMap(); if (jobDataMap != null){ jobId = jobDataMap.getLong(JOB_DATA_KEY_DETAILS_ID); } } jobExecute(jobId); } catch (JobExecutionException e) { logger.error("工作任务异常 - {}", e.toString()); throw new JobExecutionException(e); } catch (SchedulerException e) { logger.error("定时器异常 - {}", e.toString()); throw new JobExecutionException(e); } catch (Exception e) { logger.error("发生异常 - {}", e.toString()); throw new JobExecutionException(e); } finally { clear(); } logger.info("定时器结束."); } protected void clear() { jobContext = null; schedulerContext = null; jobClear(); } protected abstract void jobExecute(Long jobId) throws Exception; protected abstract void jobClear(); }