
top.zeimao77.product.jobs.JobExecHandler Maven / Gradle / Ivy
package top.zeimao77.product.jobs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import top.zeimao77.product.exception.BaseServiceRunException;
import top.zeimao77.product.exception.ExceptionCodeDefinition;
import java.util.Map;
public abstract class JobExecHandler implements JobExec{
private static Logger logger = LoggerFactory.getLogger(JobExecHandler.class);
/**
* @param job 任务
* @param param 扩展参数
* @return 是否可以处理该任务
* 需要注意的是不要让该方法抛出异常,否则可能会带来不可预测的结果;
*/
public abstract boolean support(T job, Map param);
/**
* @param job 任务
* @param param 扩展参数
* @return 处理结果
* 处理一个任务
* 如果处理失败 我们希望您通过异常
* @see BaseServiceRunException
* 或者 top.zeimao77.product.jobs.JobExec.Result
* 返回错误信息;
*/
protected abstract Result doHandle(T job,Map param);
/**
* 处理任务
* @see JobExecHandler#doHandle(IJob, Map)
* 如果处理失败将调用
* @see JobExecHandler#failed(IJob, Map, Result)
* 如果处理成功将调用
* @see JobExecHandler#successed(IJob, Map, Result)
* @param job 任务
* @param param 扩展参数
*/
public void handle(T job, Map param) {
try {
if(support(job,param)) {
Result result = doHandle(job,param);
if(result.success())
successed(job,param,result);
else
failed(job,param,result);
}
} catch (BaseServiceRunException e) {
logger.error(String.format("[%s]%s",e.getCode(),e.getMessage()),e);
Result fail = Result.fail(e.getCode(), e.getMessage(), e);
failed(job,param,fail);
} catch (RuntimeException e) {
logger.error("JOB处理运行时错误",e);
Result fail = Result.fail(FAILED, "业务处理错误", e);
failed(job,param,fail);
} catch (Throwable e) {
logger.error("JOb处理受检查的错误",e);
Result fail = Result.fail(FAILED, "未知的错误", e);
failed(job,param,fail);
}
}
/**
* 失败处理方法
* @param job 任务
* @param param 扩展参数
* @param result 调用结果;
* 如果以异常的方式返回 Result#data 将是异常;
*/
public void failed(T job,Map param,Result result) {
logger.info("JOB({})处理失败,原因:[{}]{}",job.jobId(),result.getResultCode(),result.getResultMsg());
}
/**
* 成功处理方法
* @param job 任务
* @param param 扩展参数
* @param result 调用结果
*/
public void successed(T job,Map param,Result result) {
logger.info("JOB({})处理成功:[{}]{}",job.jobId(),result.getResultCode(),result.getResultMsg());
}
/**
* 成功处理任务的后置处理
* @param 任务
*/
public interface SuccessHandler{
void successed(T job,Map param,Result result);
}
/**
* 失败处理任务的后置处理
* @param
*/
public interface FailureHandler{
void failed(T job,Map param,Result result);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy