瀏覽代碼

调度中心参数配置逻辑重构

xuxueli 7 年之前
父節點
當前提交
0ddef14076

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java

@@ -120,7 +120,7 @@ public class JobLogController {
 	@ResponseBody
 	public ReturnT<LogResult> logDetailCat(String executorAddress, long triggerTime, int logId, int fromLineNum){
 		try {
-			ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, executorAddress, XxlJobDynamicScheduler.getAccessToken()).getObject();
+			ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(executorAddress);
 			ReturnT<LogResult> logResult = executorBiz.log(triggerTime, logId, fromLineNum);
 
 			// is end
@@ -154,7 +154,7 @@ public class JobLogController {
 		// request of kill
 		ReturnT<String> runResult = null;
 		try {
-			ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, log.getExecutorAddress(), XxlJobDynamicScheduler.getAccessToken()).getObject();
+			ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(log.getExecutorAddress());
 			runResult = executorBiz.kill(jobInfo.getId());
 		} catch (Exception e) {
 			logger.error(e.getMessage(), e);

+ 0 - 29
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java

@@ -1,10 +1,7 @@
 package com.xxl.job.admin.core.route;
 
-import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
-import com.xxl.job.core.biz.ExecutorBiz;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
-import com.xxl.job.core.rpc.netcom.NetComClientProxy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -25,30 +22,4 @@ public abstract class ExecutorRouter {
      */
     public abstract ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList);
 
-    /**
-     * run executor
-     * @param triggerParam
-     * @param address
-     * @return  ReturnT.content: final address
-     */
-    public static ReturnT<String> runExecutor(TriggerParam triggerParam, String address){
-        ReturnT<String> runResult = null;
-        try {
-            ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, XxlJobDynamicScheduler.getAccessToken()).getObject();
-            runResult = executorBiz.run(triggerParam);
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-            runResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
-        }
-
-        StringBuffer runResultSB = new StringBuffer("触发调度:");
-        runResultSB.append("<br>address:").append(address);
-        runResultSB.append("<br>code:").append(runResult.getCode());
-        runResultSB.append("<br>msg:").append(runResult.getMsg());
-
-        runResult.setMsg(runResultSB.toString());
-        runResult.setContent(address);
-        return runResult;
-    }
-
 }

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java

@@ -2,10 +2,10 @@ package com.xxl.job.admin.core.route.strategy;
 
 import com.xxl.job.admin.core.route.ExecutorRouter;
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
+import com.xxl.job.admin.core.trigger.XxlJobTrigger;
 import com.xxl.job.core.biz.ExecutorBiz;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
-import com.xxl.job.core.rpc.netcom.NetComClientProxy;
 
 import java.util.ArrayList;
 
@@ -26,7 +26,7 @@ public class ExecutorRouteBusyover extends ExecutorRouter {
             // beat
             ReturnT<String> idleBeatResult = null;
             try {
-                ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, XxlJobDynamicScheduler.getAccessToken()).getObject();
+                ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(address);
                 idleBeatResult = executorBiz.idleBeat(triggerParam.getJobId());
             } catch (Exception e) {
                 logger.error(e.getMessage(), e);
@@ -41,7 +41,7 @@ public class ExecutorRouteBusyover extends ExecutorRouter {
             // beat success
             if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) {
 
-                ReturnT<String> runResult = runExecutor(triggerParam, address);
+                ReturnT<String> runResult = XxlJobTrigger.runExecutor(triggerParam, address);
                 idleBeatResultSB.append("<br><br>").append(runResult.getMsg());
 
                 // result

+ 2 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java

@@ -1,6 +1,7 @@
 package com.xxl.job.admin.core.route.strategy;
 
 import com.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.admin.core.trigger.XxlJobTrigger;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
 
@@ -82,7 +83,7 @@ public class ExecutorRouteConsistentHash extends ExecutorRouter {
         String address = route(triggerParam.getJobId(), addressList);
 
         // run executor
-        ReturnT<String> runResult = runExecutor(triggerParam, address);
+        ReturnT<String> runResult = XxlJobTrigger.runExecutor(triggerParam, address);
         runResult.setContent(address);
         return runResult;
     }

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java

@@ -2,10 +2,10 @@ package com.xxl.job.admin.core.route.strategy;
 
 import com.xxl.job.admin.core.route.ExecutorRouter;
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
+import com.xxl.job.admin.core.trigger.XxlJobTrigger;
 import com.xxl.job.core.biz.ExecutorBiz;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
-import com.xxl.job.core.rpc.netcom.NetComClientProxy;
 
 import java.util.ArrayList;
 
@@ -26,7 +26,7 @@ public class ExecutorRouteFailover extends ExecutorRouter {
             // beat
             ReturnT<String> beatResult = null;
             try {
-                ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, XxlJobDynamicScheduler.getAccessToken()).getObject();
+                ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(address);
                 beatResult = executorBiz.beat();
             } catch (Exception e) {
                 logger.error(e.getMessage(), e);
@@ -41,7 +41,7 @@ public class ExecutorRouteFailover extends ExecutorRouter {
             // beat success
             if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
 
-                ReturnT<String> runResult = runExecutor(triggerParam, address);
+                ReturnT<String> runResult = XxlJobTrigger.runExecutor(triggerParam, address);
                 beatResultSB.append("<br><br>").append(runResult.getMsg());
 
                 // result

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java

@@ -1,7 +1,7 @@
 package com.xxl.job.admin.core.route.strategy;
 
-import com.xxl.job.admin.core.model.XxlJobLog;
 import com.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.admin.core.trigger.XxlJobTrigger;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
 
@@ -23,7 +23,7 @@ public class ExecutorRouteFirst extends ExecutorRouter {
         String address = route(triggerParam.getJobId(), addressList);
 
         // run executor
-        ReturnT<String> runResult = runExecutor(triggerParam, address);
+        ReturnT<String> runResult = XxlJobTrigger.runExecutor(triggerParam, address);
         runResult.setContent(address);
         return runResult;
     }

+ 2 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java

@@ -1,6 +1,7 @@
 package com.xxl.job.admin.core.route.strategy;
 
 import com.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.admin.core.trigger.XxlJobTrigger;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
 
@@ -62,7 +63,7 @@ public class ExecutorRouteLFU extends ExecutorRouter {
         String address = route(triggerParam.getJobId(), addressList);
 
         // run executor
-        ReturnT<String> runResult = runExecutor(triggerParam, address);
+        ReturnT<String> runResult = XxlJobTrigger.runExecutor(triggerParam, address);
         runResult.setContent(address);
         return runResult;
     }

+ 2 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java

@@ -1,6 +1,7 @@
 package com.xxl.job.admin.core.route.strategy;
 
 import com.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.admin.core.trigger.XxlJobTrigger;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
 
@@ -61,7 +62,7 @@ public class ExecutorRouteLRU extends ExecutorRouter {
         String address = route(triggerParam.getJobId(), addressList);
 
         // run executor
-        ReturnT<String> runResult = runExecutor(triggerParam, address);
+        ReturnT<String> runResult = XxlJobTrigger.runExecutor(triggerParam, address);
         runResult.setContent(address);
         return runResult;
     }

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java

@@ -1,7 +1,7 @@
 package com.xxl.job.admin.core.route.strategy;
 
-import com.xxl.job.admin.core.model.XxlJobLog;
 import com.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.admin.core.trigger.XxlJobTrigger;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
 
@@ -22,7 +22,7 @@ public class ExecutorRouteLast extends ExecutorRouter {
         String address = route(triggerParam.getJobId(), addressList);
 
         // run executor
-        ReturnT<String> runResult = runExecutor(triggerParam, address);
+        ReturnT<String> runResult = XxlJobTrigger.runExecutor(triggerParam, address);
         runResult.setContent(address);
         return runResult;
     }

+ 2 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java

@@ -1,6 +1,7 @@
 package com.xxl.job.admin.core.route.strategy;
 
 import com.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.admin.core.trigger.XxlJobTrigger;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
 
@@ -25,7 +26,7 @@ public class ExecutorRouteRandom extends ExecutorRouter {
         String address = route(triggerParam.getJobId(), addressList);
 
         // run executor
-        ReturnT<String> runResult = runExecutor(triggerParam, address);
+        ReturnT<String> runResult = XxlJobTrigger.runExecutor(triggerParam, address);
         runResult.setContent(address);
         return runResult;
     }

+ 2 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java

@@ -1,6 +1,7 @@
 package com.xxl.job.admin.core.route.strategy;
 
 import com.xxl.job.admin.core.route.ExecutorRouter;
+import com.xxl.job.admin.core.trigger.XxlJobTrigger;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
 
@@ -41,7 +42,7 @@ public class ExecutorRouteRound extends ExecutorRouter {
         String address = route(triggerParam.getJobId(), addressList);
 
         // run executor
-        ReturnT<String> runResult = runExecutor(triggerParam, address);
+        ReturnT<String> runResult = XxlJobTrigger.runExecutor(triggerParam, address);
         runResult.setContent(address);
         return runResult;
     }

+ 155 - 78
xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java

@@ -9,29 +9,33 @@ import com.xxl.job.admin.dao.XxlJobInfoDao;
 import com.xxl.job.admin.dao.XxlJobLogDao;
 import com.xxl.job.admin.dao.XxlJobRegistryDao;
 import com.xxl.job.core.biz.AdminBiz;
+import com.xxl.job.core.biz.ExecutorBiz;
+import com.xxl.job.core.rpc.netcom.NetComClientProxy;
 import com.xxl.job.core.rpc.netcom.NetComServerFactory;
 import org.quartz.*;
 import org.quartz.Trigger.TriggerState;
-import org.quartz.impl.matchers.GroupMatcher;
 import org.quartz.impl.triggers.CronTriggerImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.InitializingBean;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.util.Assert;
 
-import java.util.*;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * base quartz scheduler util
  * @author xuxueli 2015-12-19 16:13:53
  */
-public final class XxlJobDynamicScheduler implements ApplicationContextAware, InitializingBean {
+public final class XxlJobDynamicScheduler implements ApplicationContextAware {
     private static final Logger logger = LoggerFactory.getLogger(XxlJobDynamicScheduler.class);
-    
-    // Scheduler
+
+    // ---------------------- param ----------------------
+
+    // scheduler
     private static Scheduler scheduler;
     public void setScheduler(Scheduler scheduler) {
 		XxlJobDynamicScheduler.scheduler = scheduler;
@@ -42,25 +46,41 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
     public void setAccessToken(String accessToken) {
         this.accessToken = accessToken;
     }
-    public static String getAccessToken() {
-        return accessToken;
-    }
 
-    // init
+    // dao
+    public static XxlJobLogDao xxlJobLogDao;
+    public static XxlJobInfoDao xxlJobInfoDao;
+    public static XxlJobRegistryDao xxlJobRegistryDao;
+    public static XxlJobGroupDao xxlJobGroupDao;
+    public static AdminBiz adminBiz;
+
+    // ---------------------- applicationContext ----------------------
+    @Override
+	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+		XxlJobDynamicScheduler.xxlJobLogDao = applicationContext.getBean(XxlJobLogDao.class);
+		XxlJobDynamicScheduler.xxlJobInfoDao = applicationContext.getBean(XxlJobInfoDao.class);
+        XxlJobDynamicScheduler.xxlJobRegistryDao = applicationContext.getBean(XxlJobRegistryDao.class);
+        XxlJobDynamicScheduler.xxlJobGroupDao = applicationContext.getBean(XxlJobGroupDao.class);
+        XxlJobDynamicScheduler.adminBiz = applicationContext.getBean(AdminBiz.class);
+	}
+
+    // ---------------------- init + destroy ----------------------
     public void init() throws Exception {
-		// admin registry monitor run
+        // admin registry monitor run
         JobRegistryMonitorHelper.getInstance().start();
 
         // admin monitor run
         JobFailMonitorHelper.getInstance().start();
 
-        // rpc-service, base on spring-mvc
+        // admin-server(spring-mvc)
         NetComServerFactory.putService(AdminBiz.class, XxlJobDynamicScheduler.adminBiz);
         NetComServerFactory.setAccessToken(accessToken);
 
+        // valid
+        Assert.notNull(scheduler, "quartz scheduler is null");
+        logger.info(">>>>>>>>> init quartz scheduler success.[{}]", scheduler);
     }
-    
-    // destroy
+
     public void destroy(){
         // admin registry stop
         JobRegistryMonitorHelper.getInstance().toStop();
@@ -68,64 +88,35 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
         // admin monitor stop
         JobFailMonitorHelper.getInstance().toStop();
     }
-    
-    // xxlJobLogDao、xxlJobInfoDao
-    public static XxlJobLogDao xxlJobLogDao;
-    public static XxlJobInfoDao xxlJobInfoDao;
-    public static XxlJobRegistryDao xxlJobRegistryDao;
-    public static XxlJobGroupDao xxlJobGroupDao;
-    public static AdminBiz adminBiz;
 
-    @Override
-	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
-		XxlJobDynamicScheduler.xxlJobLogDao = applicationContext.getBean(XxlJobLogDao.class);
-		XxlJobDynamicScheduler.xxlJobInfoDao = applicationContext.getBean(XxlJobInfoDao.class);
-        XxlJobDynamicScheduler.xxlJobRegistryDao = applicationContext.getBean(XxlJobRegistryDao.class);
-        XxlJobDynamicScheduler.xxlJobGroupDao = applicationContext.getBean(XxlJobGroupDao.class);
-        XxlJobDynamicScheduler.adminBiz = applicationContext.getBean(AdminBiz.class);
-	}
-    
-	@Override
-    public void afterPropertiesSet() throws Exception {
-        Assert.notNull(scheduler, "quartz scheduler is null");
-        logger.info(">>>>>>>>> init quartz scheduler success.[{}]", scheduler);
-       
+    // ---------------------- executor-client ----------------------
+    private static ConcurrentHashMap<String, ExecutorBiz> executorBizRepository = new ConcurrentHashMap<String, ExecutorBiz>();
+    public static ExecutorBiz getExecutorBiz(String address) throws Exception {
+        // valid
+        if (address==null || address.trim().length()==0) {
+            return null;
+        }
+
+        // load-cache
+        address = address.trim();
+        ExecutorBiz executorBiz = executorBizRepository.get(address);
+        if (executorBiz != null) {
+            return executorBiz;
+        }
+
+        // set-cache
+        executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, accessToken).getObject();
+        executorBizRepository.put(address, executorBiz);
+        return executorBiz;
     }
-	
-	// getJobKeys
-	@Deprecated
-	public static List<Map<String, Object>> getJobList(){
-		List<Map<String, Object>> jobList = new ArrayList<Map<String,Object>>();
-		
-		try {
-			if (scheduler.getJobGroupNames()==null || scheduler.getJobGroupNames().size()==0) {
-				return null;
-			}
-			String groupName = scheduler.getJobGroupNames().get(0);
-			Set<JobKey> jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName));
-			if (jobKeys!=null && jobKeys.size()>0) {
-				for (JobKey jobKey : jobKeys) {
-			        TriggerKey triggerKey = TriggerKey.triggerKey(jobKey.getName(), Scheduler.DEFAULT_GROUP);
-			        Trigger trigger = scheduler.getTrigger(triggerKey);
-			        JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-			        TriggerState triggerState = scheduler.getTriggerState(triggerKey);
-			        Map<String, Object> jobMap = new HashMap<String, Object>();
-			        jobMap.put("TriggerKey", triggerKey);
-			        jobMap.put("Trigger", trigger);
-			        jobMap.put("JobDetail", jobDetail);
-			        jobMap.put("TriggerState", triggerState);
-			        jobList.add(jobMap);
-				}
-			}
-			
-		} catch (SchedulerException e) {
-			e.printStackTrace();
-			return null;
-		}
-		return jobList;
-	}
-	
-	// fill job info
+
+    // ---------------------- schedule util ----------------------
+
+    /**
+     * fill job info
+     *
+     * @param jobInfo
+     */
 	public static void fillJobInfo(XxlJobInfo jobInfo) {
 		// TriggerKey : name + group
         String group = String.valueOf(jobInfo.getJobGroup());
@@ -156,14 +147,28 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
 		}
 	}
 	
-	// check if exists
+    /**
+     * check if exists
+     *
+     * @param jobName
+     * @param jobGroup
+     * @return
+     * @throws SchedulerException
+     */
 	public static boolean checkExists(String jobName, String jobGroup) throws SchedulerException{
 		TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
 		return scheduler.checkExists(triggerKey);
 	}
 
-	// addJob 新增
-	@SuppressWarnings("unchecked")
+    /**
+     * addJob
+     *
+     * @param jobName
+     * @param jobGroup
+     * @param cronExpression
+     * @return
+     * @throws SchedulerException
+     */
 	public static boolean addJob(String jobName, String jobGroup, String cronExpression) throws SchedulerException {
     	// TriggerKey : name + group
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
@@ -196,7 +201,15 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
         return true;
     }
     
-    // reschedule
+    /**
+     * rescheduleJob
+     *
+     * @param jobGroup
+     * @param jobName
+     * @param cronExpression
+     * @return
+     * @throws SchedulerException
+     */
 	public static boolean rescheduleJob(String jobGroup, String jobName, String cronExpression) throws SchedulerException {
     	
     	// TriggerKey valid if_exists
@@ -245,7 +258,14 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
         return true;
     }
     
-    // unscheduleJob
+    /**
+     * unscheduleJob
+     *
+     * @param jobName
+     * @param jobGroup
+     * @return
+     * @throws SchedulerException
+     */
     public static boolean removeJob(String jobName, String jobGroup) throws SchedulerException {
     	// TriggerKey : name + group
         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
@@ -257,7 +277,14 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
         return true;
     }
 
-    // Pause
+    /**
+     * pause
+     *
+     * @param jobName
+     * @param jobGroup
+     * @return
+     * @throws SchedulerException
+     */
     public static boolean pauseJob(String jobName, String jobGroup) throws SchedulerException {
     	// TriggerKey : name + group
     	TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
@@ -273,7 +300,14 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
         return result;
     }
     
-    // resume
+    /**
+     * resume
+     *
+     * @param jobName
+     * @param jobGroup
+     * @return
+     * @throws SchedulerException
+     */
     public static boolean resumeJob(String jobName, String jobGroup) throws SchedulerException {
     	// TriggerKey : name + group
     	TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
@@ -289,7 +323,14 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
         return result;
     }
     
-    // run
+    /**
+     * run
+     *
+     * @param jobName
+     * @param jobGroup
+     * @return
+     * @throws SchedulerException
+     */
     public static boolean triggerJob(String jobName, String jobGroup) throws SchedulerException {
     	// TriggerKey : name + group
     	JobKey jobKey = new JobKey(jobName, jobGroup);
@@ -305,5 +346,41 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
         return result;
     }
 
+    /**
+     * finaAllJobList
+     *
+     * @return
+     *//*
+    @Deprecated
+    public static List<Map<String, Object>> finaAllJobList(){
+        List<Map<String, Object>> jobList = new ArrayList<Map<String,Object>>();
+
+        try {
+            if (scheduler.getJobGroupNames()==null || scheduler.getJobGroupNames().size()==0) {
+                return null;
+            }
+            String groupName = scheduler.getJobGroupNames().get(0);
+            Set<JobKey> jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName));
+            if (jobKeys!=null && jobKeys.size()>0) {
+                for (JobKey jobKey : jobKeys) {
+                    TriggerKey triggerKey = TriggerKey.triggerKey(jobKey.getName(), Scheduler.DEFAULT_GROUP);
+                    Trigger trigger = scheduler.getTrigger(triggerKey);
+                    JobDetail jobDetail = scheduler.getJobDetail(jobKey);
+                    TriggerState triggerState = scheduler.getTriggerState(triggerKey);
+                    Map<String, Object> jobMap = new HashMap<String, Object>();
+                    jobMap.put("TriggerKey", triggerKey);
+                    jobMap.put("Trigger", trigger);
+                    jobMap.put("JobDetail", jobDetail);
+                    jobMap.put("TriggerState", triggerState);
+                    jobList.add(jobMap);
+                }
+            }
+
+        } catch (SchedulerException e) {
+            e.printStackTrace();
+            return null;
+        }
+        return jobList;
+    }*/
 
 }

+ 29 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java

@@ -5,9 +5,9 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
 import com.xxl.job.admin.core.model.XxlJobInfo;
 import com.xxl.job.admin.core.model.XxlJobLog;
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
-import com.xxl.job.admin.core.route.ExecutorRouter;
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
 import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
+import com.xxl.job.core.biz.ExecutorBiz;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.biz.model.TriggerParam;
 import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
@@ -90,12 +90,12 @@ public class XxlJobTrigger {
                     triggerParam.setBroadcastTotal(addressList.size()); // update02
 
                     // 4.2、trigger-run (route run / trigger remote executor)
-                    triggerResult = ExecutorRouter.runExecutor(triggerParam, address);     // update03
+                    triggerResult = runExecutor(triggerParam, address);     // update03
                     triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>触发调度<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
 
                     // 4.3、trigger (fail retry)
                     if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE && failStrategy == ExecutorFailStrategyEnum.FAIL_RETRY) {
-                        triggerResult = ExecutorRouter.runExecutor(triggerParam, address);  // update04
+                        triggerResult = runExecutor(triggerParam, address);  // update04
                         triggerMsgSb.append("<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>失败重试<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
                     }
                 }
@@ -179,4 +179,30 @@ public class XxlJobTrigger {
         logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
     }
 
+    /**
+     * run executor
+     * @param triggerParam
+     * @param address
+     * @return  ReturnT.content: final address
+     */
+    public static ReturnT<String> runExecutor(TriggerParam triggerParam, String address){
+        ReturnT<String> runResult = null;
+        try {
+            ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(address);
+            runResult = executorBiz.run(triggerParam);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            runResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
+        }
+
+        StringBuffer runResultSB = new StringBuffer("触发调度:");
+        runResultSB.append("<br>address:").append(address);
+        runResultSB.append("<br>code:").append(runResult.getCode());
+        runResultSB.append("<br>msg:").append(runResult.getMsg());
+
+        runResult.setMsg(runResultSB.toString());
+        runResult.setContent(address);
+        return runResult;
+    }
+
 }

+ 7 - 7
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java

@@ -26,7 +26,7 @@ import java.util.concurrent.ConcurrentHashMap;
 public class XxlJobExecutor implements ApplicationContextAware {
     private static final Logger logger = LoggerFactory.getLogger(XxlJobExecutor.class);
 
-    // ---------------------------------- param ------------------------------------
+    // ---------------------- param ----------------------
     private String ip;
     private int port = 9999;
     private String appName;
@@ -54,7 +54,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
     }
 
 
-    // ---------------------------------- applicationContext ------------------------------------
+    // ---------------------- applicationContext ----------------------
     private static ApplicationContext applicationContext;
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
@@ -65,7 +65,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
     }
 
 
-    // ---------------------------------- start + stop ------------------------------------
+    // ---------------------- start + stop ----------------------
     public void start() throws Exception {
         // init admin-client
         initAdminBizList(adminAddresses, accessToken);
@@ -95,7 +95,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
     }
 
 
-    // ---------------------------------- admin-client ------------------------------------
+    // ---------------------- admin-client ----------------------
     private static List<AdminBiz> adminBizList;
     private static void initAdminBizList(String adminAddresses, String accessToken) throws Exception {
         if (adminAddresses!=null && adminAddresses.trim().length()>0) {
@@ -116,7 +116,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
     }
 
 
-    // ---------------------------------- executor-server ------------------------------------
+    // ---------------------- executor-server(jetty) ----------------------
     private NetComServerFactory serverFactory = new NetComServerFactory();
     private void initExecutorServer(int port, String ip, String appName, String accessToken) throws Exception {
         NetComServerFactory.putService(ExecutorBiz.class, new ExecutorBizImpl());   // rpc-service, base on jetty
@@ -128,7 +128,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
     }
 
 
-    // ---------------------------------- job handler repository ------------------------------------
+    // ---------------------- job handler repository ----------------------
     private static ConcurrentHashMap<String, IJobHandler> jobHandlerRepository = new ConcurrentHashMap<String, IJobHandler>();
     public static IJobHandler registJobHandler(String name, IJobHandler jobHandler){
         logger.info("xxl-job register jobhandler success, name:{}, jobHandler:{}", name, jobHandler);
@@ -156,7 +156,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
     }
 
 
-    // ---------------------------------- job thread repository ------------------------------------
+    // ---------------------- job thread repository ----------------------
     private static ConcurrentHashMap<Integer, JobThread> JobThreadRepository = new ConcurrentHashMap<Integer, JobThread>();
     public static JobThread registJobThread(int jobId, IJobHandler handler, String removeOldReason){
         JobThread newJobThread = new JobThread(jobId, handler);