CRM中quartz与Spring结合使用
Spring 通过提供org.springframework.scheng.quartz下的封装类对quartz支持
但是目前存在问题
1:Spring3.0目前不支持Quartz2.x以上版本
Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.scheng.quartz.CronTriggerBean
has intece org.quartz.CronTrigger as super class
原因是 org.quartz.CronTrigger在2.0从class变成了一个intece造成IncompatibleClassChangeError错误。
解决:无解,要想使用spring和quartz结合的方式 只能使用Quartz1.x版本。
2:org.springframework.scheng.quartz.MethodInvokingJobDetailFactoryBean报
java.io.NotSerializableException异常,需要自己实现QuartzJobBean。
解决:spring bug己经在找到解决方案,
作者重写了MethodInvokingJobDetailFactoryBean.
3:Spring内bean必须要实现序列化接口,否则不能通过Sprng 属性注入的方式为job提供业务对象
解决:
//使用可序列化工具类获取Spring容器对象
@Service("springBeanService")
public class SpringBeanService implements Serializable{private static final long serialVersionUID = -2228376078979553838L;
public <T> T getBean(Class<T> clazz,String beanName){
ApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
return (T)context.getBean(beanName);
}
}
CRM中quartz模块部分代码
1:定义所有job的父类,并负责异常发送邮件任务和日志任务
public abstract class BaseQuartzJob implements Job, Serializable {
private static final long serialVersionUID = 3347549365534415931L;
private Logger logger = LoggerFactory.getLogger(this.getClass());
//定义抽象方法,供子类实现
public abstract void action(JobExecutionContext context);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
long start = System.currentTimeMillis();
this.action(context);
long end = System.currentTimeMillis();
JobDetail jobDetail = context.getJobDetail();
Trigger trigger = context.getTrigger();
StringBuilder buffer = new StringBuilder();
buffer.append("jobName = ").append(jobDetail.getName()).append(" triggerName = ")
.append(trigger.getName()).append(" 执行完成 , 耗时: ").append((end - start)).append(" ms");
logger.info(buffer.toString());
} catch (Exception e) {
doResolveException(context != null ? context.getMergedJobDataMap() : null, e);
}
}
@SuppressWarnings("unchecked")
private void doResolveException(JobDataMap dataMap, Exception ex) {
//发送邮件实现此处省略
//...
}
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29777-19.html
美国的最终目的就是把世界上所有的大国分割成小国
毛主席语录