<pre name="code" class="java">public abstract class AbstractCommonQuartzJob<T extends IQuartzCommonSIDSV> implements Job {
private static Logger logger = LoggerFactory.getLogger(AbstractCommonQuartzJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = null;
String provinceCode = null ;
Map<String,String> extendParams = new java.util.HashMap<>();
if(context == null){
} else {
jobDataMap = context.getJobDetail().getJobDataMap();
//获取设置的省分编码;
provinceCode = jobDataMap.getString(JobConstants.JobParam_ProvinceCode);
for(String key : jobDataMap.keySet()){
if( jobDataMap.get(key) != null){
extendParams.put(key,jobDataMap.getString(key));
}
}
}
IQuartzCommonSIDSV sv = this.getService();
try{
if(StringUtils.isEmpty(provinceCode)){
logger.info("定时任务开始,获取的省分编码为空,执行所有省分处理");
sv.dealQuartz(extendParams);
} else {
logger.info("定时任务开始,获取的省分编码列表为:"+provinceCode);
String[] provinceCodes = provinceCode.split(JobConstants.JobParam_SPLIT);
sv.dealQuartzByProvinceCodes(provinceCodes,extendParams);
}
} catch(Exception e){
logger.error("定时任务失败!", e);
throw new JobExecutionException(e);
} finally {
logger.info("定时任务结束!");
}
}
/**
* 获取 对应的服务;
* @return
* @author yugn
*/
abstract protected T getService();
}
上述虚拟类
@DisallowConcurrentExecution
public class SmsSendJob extends AbstractCommonQuartzJob<IQuartzSmsSendSIDSV> {
@Override
protected IQuartzSmsSendSIDSV getService() {
return (IQuartzSmsSendSIDSV) QuartzContextHolder.getBean(JobConstants.SmsSendService);
}
public static void main(String[] args) throws JobExecutionException {
SmsSendJob job = new SmsSendJob();
job.execute(null);
}
}
这是实现类
泛型和虚拟类的使用,使得业务代码被完全封装,本质类似于适配器模式,但一层虚拟函数与泛型的使用,拓展了适配器模式中继承类选择,可以看做是适配器模式的拓展。
将服务类的对象实现了配置,从配置文件读取。