diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/callback/XxlJobLogCallbackServerHandler.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/callback/XxlJobLogCallbackServerHandler.java
index 5bf24493..efc44eb3 100644
--- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/callback/XxlJobLogCallbackServerHandler.java
+++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/callback/XxlJobLogCallbackServerHandler.java
@@ -1,6 +1,5 @@
package com.xxl.job.admin.core.callback;
-import com.xxl.job.admin.core.model.ReturnT;
import com.xxl.job.admin.core.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog;
import com.xxl.job.admin.core.util.DynamicSchedulerUtil;
@@ -35,56 +34,9 @@ public class XxlJobLogCallbackServerHandler extends AbstractHandler {
// parse hex-json to request model
String requestHex = httpServletRequest.getParameter(XxlJobNetCommUtil.HEX);
- RequestModel requestModel = XxlJobNetCommUtil.parseHexJson2Obj(requestHex, RequestModel.class);
- // process
- ResponseModel responseModel = null;
- XxlJobLog log = DynamicSchedulerUtil.xxlJobLogDao.load(requestModel.getLogId());
- if (log!=null) {
-
- // trigger success, to trigger child job, and avoid repeat trigger child job
- String childTriggerMsg = null;
- if (ResponseModel.SUCCESS.equals(requestModel.getStatus()) && !ResponseModel.SUCCESS.equals(log.getHandleStatus())) {
- XxlJobInfo xxlJobInfo = DynamicSchedulerUtil.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
- if (xxlJobInfo!=null && StringUtils.isNotBlank(xxlJobInfo.getChildJobKey())) {
- childTriggerMsg = "
";
- String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
- for (int i = 0; i < childJobKeys.length; i++) {
- String[] jobKeyArr = childJobKeys[i].split("_");
- if (jobKeyArr!=null && jobKeyArr.length==2) {
- XxlJobInfo childJobInfo = DynamicSchedulerUtil.xxlJobInfoDao.load(jobKeyArr[0], jobKeyArr[1]);
- if (childJobInfo!=null) {
- try {
- boolean ret = DynamicSchedulerUtil.triggerJob(childJobInfo.getJobName(), childJobInfo.getJobGroup());
-
- // add msg
- childTriggerMsg += MessageFormat.format("
{0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}",
- (i+1), childJobKeys.length, childJobKeys[i], ret, childJobInfo.getJobDesc());
- } catch (SchedulerException e) {
- logger.error("", e);
- }
- } else {
- childTriggerMsg += MessageFormat.format("
{0}/{1} 触发子任务失败, 子任务xxlJobInfo不存在, 子任务Key: {2}",
- (i+1), childJobKeys.length, childJobKeys[i]);
- }
- } else {
- childTriggerMsg += MessageFormat.format("
{0}/{1} 触发子任务失败, 子任务Key格式错误, 子任务Key: {2}",
- (i+1), childJobKeys.length, childJobKeys[i]);
- }
- }
-
- }
- }
-
- // save log
- log.setHandleTime(new Date());
- log.setHandleStatus(requestModel.getStatus());
- log.setHandleMsg(requestModel.getMsg() + childTriggerMsg);
- DynamicSchedulerUtil.xxlJobLogDao.updateHandleInfo(log);
- responseModel = new ResponseModel(ResponseModel.SUCCESS, null);
- } else {
- responseModel = new ResponseModel(ResponseModel.FAIL, "log item not found.");
- }
+ // do biz
+ ResponseModel responseModel = dobiz(requestHex);
// format response model to hex-json
String responseHex = XxlJobNetCommUtil.formatObj2HexJson(responseModel);
@@ -96,4 +48,66 @@ public class XxlJobLogCallbackServerHandler extends AbstractHandler {
httpServletResponse.getWriter().println(responseHex);
}
+ private ResponseModel dobiz(String requestHex){
+
+ // valid hex
+ if (requestHex==null || requestHex.trim().length()==0) {
+ return new ResponseModel(ResponseModel.FAIL, "request hex is null.");
+ }
+
+ // valid request model
+ RequestModel requestModel = XxlJobNetCommUtil.parseHexJson2Obj(requestHex, RequestModel.class);
+ if (requestModel==null) {
+ return new ResponseModel(ResponseModel.FAIL, "request hex parse fail.");
+ }
+
+ // valid log item
+ XxlJobLog log = DynamicSchedulerUtil.xxlJobLogDao.load(requestModel.getLogId());
+ if (log == null) {
+ return new ResponseModel(ResponseModel.FAIL, "log item not found.");
+ }
+
+ // trigger success, to trigger child job, and avoid repeat trigger child job
+ String childTriggerMsg = null;
+ if (ResponseModel.SUCCESS.equals(requestModel.getStatus()) && !ResponseModel.SUCCESS.equals(log.getHandleStatus())) {
+ XxlJobInfo xxlJobInfo = DynamicSchedulerUtil.xxlJobInfoDao.load(log.getJobGroup(), log.getJobName());
+ if (xxlJobInfo!=null && StringUtils.isNotBlank(xxlJobInfo.getChildJobKey())) {
+ childTriggerMsg = "
";
+ String[] childJobKeys = xxlJobInfo.getChildJobKey().split(",");
+ for (int i = 0; i < childJobKeys.length; i++) {
+ String[] jobKeyArr = childJobKeys[i].split("_");
+ if (jobKeyArr!=null && jobKeyArr.length==2) {
+ XxlJobInfo childJobInfo = DynamicSchedulerUtil.xxlJobInfoDao.load(jobKeyArr[0], jobKeyArr[1]);
+ if (childJobInfo!=null) {
+ try {
+ boolean ret = DynamicSchedulerUtil.triggerJob(childJobInfo.getJobName(), childJobInfo.getJobGroup());
+
+ // add msg
+ childTriggerMsg += MessageFormat.format("
{0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}",
+ (i+1), childJobKeys.length, childJobKeys[i], ret, childJobInfo.getJobDesc());
+ } catch (SchedulerException e) {
+ logger.error("", e);
+ }
+ } else {
+ childTriggerMsg += MessageFormat.format("
{0}/{1} 触发子任务失败, 子任务xxlJobInfo不存在, 子任务Key: {2}",
+ (i+1), childJobKeys.length, childJobKeys[i]);
+ }
+ } else {
+ childTriggerMsg += MessageFormat.format("
{0}/{1} 触发子任务失败, 子任务Key格式错误, 子任务Key: {2}",
+ (i+1), childJobKeys.length, childJobKeys[i]);
+ }
+ }
+
+ }
+ }
+
+ // success, save log
+ log.setHandleTime(new Date());
+ log.setHandleStatus(requestModel.getStatus());
+ log.setHandleMsg(requestModel.getMsg() + childTriggerMsg);
+ DynamicSchedulerUtil.xxlJobLogDao.updateHandleInfo(log);
+
+ return new ResponseModel(ResponseModel.SUCCESS, null);
+ }
+
}
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java b/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java
new file mode 100644
index 00000000..303eb2fb
--- /dev/null
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java
@@ -0,0 +1,30 @@
+package com.xxl.job.core.glue.loader.impl;
+
+import com.xxl.job.core.glue.loader.GlueLoader;
+import com.xxl.job.core.util.DBUtil;
+
+import javax.sql.DataSource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by xuxueli on 16/9/30.
+ */
+public class DbGlueLoader implements GlueLoader {
+
+ private DataSource dataSource;
+ public void setDataSource(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ @Override
+ public String load(String job_group, String job_name) {
+ String sql = "SELECT glue_source FROM XXL_JOB_QRTZ_TRIGGER_INFO WHERE job_group = ? AND job_name = ?";
+ List