IJobHandler取消任务返回值,原通过返回值判断执行状态,逻辑改为:默认任务执行成功,仅在捕获异常时认定任务执行失败。

This commit is contained in:
xueli.xue 2016-09-06 15:37:38 +08:00
parent 6b0d17a4c6
commit 148b7ca5e3
8 changed files with 33 additions and 50 deletions

View File

@ -589,9 +589,11 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件通过重写L
- 1、groupId从com.xxl改为com.xuxueli,为推送maven中央仓库做前期准备; - 1、groupId从com.xxl改为com.xuxueli,为推送maven中央仓库做前期准备;
- 2、系统版本不在维护在项目跟pom中,各个子模块单独配置版本配置,解决子模块无法单独编译的问题; - 2、系统版本不在维护在项目跟pom中,各个子模块单独配置版本配置,解决子模块无法单独编译的问题;
- 3、底层RPC通讯,传输数据的字节长度统计规则优化,可节省50%数据传输量; - 3、底层RPC通讯,传输数据的字节长度统计规则优化,可节省50%数据传输量;
- 4、系统公共弹框功能,插件化; - 4、IJobHandler取消任务返回值,原通过返回值判断执行状态,逻辑改为:默认任务执行成功,仅在捕获异常时认定任务执行失败。
- 5、底层表结构,表明统一大写; - 5、系统公共弹框功能,插件化;
- 6、调度中心,异常处理器JSON响应的ContentType修改,修复浏览器不识别的问题; - 6、底层表结构,表明统一大写;
- 7、调度中心,异常处理器JSON响应的ContentType修改,修复浏览器不识别的问题;
Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段, 地址见分支 [V1.3](https://github.com/xuxueli/xxl-job/tree/v1.3) 。新特性将会在master分支持续更新。 Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段, 地址见分支 [V1.3](https://github.com/xuxueli/xxl-job/tree/v1.3) 。新特性将会在master分支持续更新。

View File

@ -169,15 +169,13 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.IJobHandler.JobHandleStatus;
public class DemoJobHandler extends IJobHandler { public class DemoGlueJobHandler extends IJobHandler {
private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class); private static transient Logger logger = LoggerFactory.getLogger(DemoGlueJobHandler.class);
@Override @Override
public JobHandleStatus execute(String... params) throws Exception { public void execute(String... params) throws Exception {
logger.info("XXL-JOB, Hello World."); logger.info("XXL-JOB, Hello World.");
return JobHandleStatus.SUCCESS;
} }
} }

View File

@ -2,7 +2,6 @@ package com.xxl.job.dao.impl;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.core.model.XxlJobLog;
import com.xxl.job.admin.dao.IXxlJobLogDao; import com.xxl.job.admin.dao.IXxlJobLogDao;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.router.model.ResponseModel; import com.xxl.job.core.router.model.ResponseModel;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -45,7 +44,7 @@ public class XxlJobLogTest {
public void updateHandleInfo(){ public void updateHandleInfo(){
XxlJobLog xxlJobLog = xxlJobLogDao.load(29); XxlJobLog xxlJobLog = xxlJobLogDao.load(29);
xxlJobLog.setHandleTime(new Date()); xxlJobLog.setHandleTime(new Date());
xxlJobLog.setHandleStatus(IJobHandler.JobHandleStatus.SUCCESS.name()); xxlJobLog.setHandleStatus(ResponseModel.SUCCESS);
xxlJobLog.setHandleMsg("handle msg"); xxlJobLog.setHandleMsg("handle msg");
xxlJobLogDao.updateHandleInfo(xxlJobLog); xxlJobLogDao.updateHandleInfo(xxlJobLog);
} }

View File

@ -1,10 +1,9 @@
package com.xxl.job.core.glue; package com.xxl.job.core.glue;
import java.lang.reflect.Field; import com.xxl.job.core.glue.cache.LocalCache;
import java.lang.reflect.Modifier; import com.xxl.job.core.glue.loader.GlueLoader;
import com.xxl.job.core.handler.IJobHandler;
import javax.annotation.Resource; import groovy.lang.GroovyClassLoader;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
@ -13,12 +12,9 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.annotation.AnnotationUtils;
import com.xxl.job.core.glue.cache.LocalCache; import javax.annotation.Resource;
import com.xxl.job.core.glue.loader.GlueLoader; import java.lang.reflect.Field;
import com.xxl.job.core.handler.IJobHandler; import java.lang.reflect.Modifier;
import com.xxl.job.core.handler.IJobHandler.JobHandleStatus;
import groovy.lang.GroovyClassLoader;
/** /**
* glue factory, product class/object by name * glue factory, product class/object by name
@ -157,8 +153,8 @@ public class GlueFactory implements ApplicationContextAware {
} }
// ----------------------------- util ----------------------------- // ----------------------------- util -----------------------------
public static JobHandleStatus glue(String job_group, String job_name, String... params) throws Exception{ public static void glue(String job_group, String job_name, String... params) throws Exception{
return GlueFactory.glueFactory.loadInstance(job_group, job_name).execute(params); GlueFactory.glueFactory.loadInstance(job_group, job_name).execute(params);
} }
} }

View File

@ -12,20 +12,9 @@ public abstract class IJobHandler extends HandlerRouter {
* job handler <br><br> * job handler <br><br>
* the return Object will be and stored * the return Object will be and stored
* @param params * @param params
* @return job status * @return void, fail if catch exception
* @throws Exception * @throws Exception
*/ */
public abstract JobHandleStatus execute(String... params) throws Exception; public abstract void execute(String... params) throws Exception;
public static enum JobHandleStatus{
/**
* handle success
*/
SUCCESS,
/**
* handle fail
*/
FAIL;
}
} }

View File

@ -17,8 +17,8 @@ public class GlueJobHandler extends IJobHandler {
} }
@Override @Override
public JobHandleStatus execute(String... params) throws Exception { public void execute(String... params) throws Exception {
return GlueFactory.glue(job_group, job_name, params); GlueFactory.glue(job_group, job_name, params);
} }
} }

View File

@ -1,9 +1,9 @@
package com.xxl.job.core.router.thread; package com.xxl.job.core.router.thread;
import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.IJobHandler.JobHandleStatus;
import com.xxl.job.core.log.XxlJobFileAppender; import com.xxl.job.core.log.XxlJobFileAppender;
import com.xxl.job.core.router.model.RequestModel; import com.xxl.job.core.router.model.RequestModel;
import com.xxl.job.core.router.model.ResponseModel;
import org.eclipse.jetty.util.ConcurrentHashSet; import org.eclipse.jetty.util.ConcurrentHashSet;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -74,15 +74,16 @@ public class JobThread extends Thread{
? (String[])(Arrays.asList(triggerDate.getExecutorParams().split(",")).toArray()) : null; ? (String[])(Arrays.asList(triggerDate.getExecutorParams().split(",")).toArray()) : null;
// handle job // handle job
JobHandleStatus _status = JobHandleStatus.FAIL; String _status = ResponseModel.SUCCESS;
String _msg = null; String _msg = null;
try { try {
XxlJobFileAppender.contextHolder.set(String.valueOf(triggerDate.getLogId())); XxlJobFileAppender.contextHolder.set(String.valueOf(triggerDate.getLogId()));
logger.info("----------- xxl-job job handle start -----------"); logger.info("----------- xxl-job job handle start -----------");
_status = handler.execute(handlerParams); handler.execute(handlerParams);
} catch (Exception e) { } catch (Exception e) {
logger.info("JobThread Exception:", e); logger.info("JobThread Exception:", e);
_status = ResponseModel.FAIL;
StringWriter out = new StringWriter(); StringWriter out = new StringWriter();
e.printStackTrace(new PrintWriter(out)); e.printStackTrace(new PrintWriter(out));
_msg = out.toString(); _msg = out.toString();
@ -93,12 +94,12 @@ public class JobThread extends Thread{
// callback handler info // callback handler info
if (!toStop) { if (!toStop) {
// commonm // commonm
triggerDate.setStatus(_status.name()); triggerDate.setStatus(_status);
triggerDate.setMsg(_msg); triggerDate.setMsg(_msg);
TriggerCallbackThread.pushCallBack(triggerDate); TriggerCallbackThread.pushCallBack(triggerDate);
} else { } else {
// is killed // is killed
triggerDate.setStatus(JobHandleStatus.FAIL.name()); triggerDate.setStatus(ResponseModel.FAIL);
triggerDate.setMsg(stopReason + " [业务运行中,被强制终止]"); triggerDate.setMsg(stopReason + " [业务运行中,被强制终止]");
TriggerCallbackThread.pushCallBack(triggerDate); TriggerCallbackThread.pushCallBack(triggerDate);
} }
@ -113,7 +114,7 @@ public class JobThread extends Thread{
RequestModel triggerDate = triggerQueue.poll(); RequestModel triggerDate = triggerQueue.poll();
if (triggerDate!=null) { if (triggerDate!=null) {
// is killed // is killed
triggerDate.setStatus(JobHandleStatus.FAIL.name()); triggerDate.setStatus(ResponseModel.FAIL);
triggerDate.setMsg(stopReason + " [任务尚未执行,在调度队列中被终止]"); triggerDate.setMsg(stopReason + " [任务尚未执行,在调度队列中被终止]");
TriggerCallbackThread.pushCallBack(triggerDate); TriggerCallbackThread.pushCallBack(triggerDate);
} }

View File

@ -1,13 +1,12 @@
package com.xxl.job.executor.service.jobhandler; package com.xxl.job.executor.service.jobhandler;
import java.util.concurrent.TimeUnit; import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHander;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xxl.job.core.handler.IJobHandler; import java.util.concurrent.TimeUnit;
import com.xxl.job.core.handler.annotation.JobHander;
/** /**
@ -26,14 +25,13 @@ public class DemoJobHandler extends IJobHandler {
private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class); private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class);
@Override @Override
public JobHandleStatus execute(String... params) throws Exception { public void execute(String... params) throws Exception {
logger.info("XXL-JOB, Hello World."); logger.info("XXL-JOB, Hello World.");
for (int i = 0; i < 2; i++) { for (int i = 0; i < 2; i++) {
logger.info("beat at:{}", i); logger.info("beat at:{}", i);
TimeUnit.SECONDS.sleep(2); TimeUnit.SECONDS.sleep(2);
} }
return JobHandleStatus.SUCCESS;
} }
} }