AutowiringSpringBeanJobFactory类:
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
/**
* @author
* @description 使job类支持spring的自动注入
* @date 2016-05-27
*/
public class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware
{
private transient AutowireCapableBeanFactory beanFactory;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
{
beanFactory = applicationContext.getAutowireCapableBeanFactory();
}
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception
{
Object job = super.createJobInstance(bundle);
beanFactory.autowireBean(job);
return job;
}
}
PersistableCronTriggerFactoryBean类:
import java.text.ParseException;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
/**
* @author FengHaixin
* @description 一句话描述该文件的用途
* @date 2016-05-27
*/
public class PersistableCronTriggerFactoryBean extends CronTriggerFactoryBean
{
@Override
public void afterPropertiesSet() throws ParseException
{
super.afterPropertiesSet();
getJobDataMap().remove(getObject().getJobKey().getName());
}
}
执行的定时任务类:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import com.kmei.common.util.DateUtil;
/**
* @author
* @description 一句话描述该文件的用途
* @date 2016-05-23
*/
public class PrintCurrentTimeJobs extends QuartzJobBean
{
private static final Log LOG_RECORD = LogFactory.getLog(PrintCurrentTimeJobs.class);
//这里就是因为有上文中的AutowiringSpringBeanJobFactory才可以使用@Autowired注解,否则只能在配置文件中设置这属性的值
@Autowired
private ClusterQuartz clusterQuartz;
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException
{
LOG_RECORD.info