diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java index 8d94554c63fae61b783d52d36f1a0bacaf945094..222f59e77ef2e85a3ecd66ca7460c569f32be0af 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java @@ -8,6 +8,7 @@ import com.xxl.job.core.rpc.netcom.NetComServerFactory; import com.xxl.job.core.thread.ExecutorRegistryThread; import com.xxl.job.core.thread.JobThread; import com.xxl.job.core.thread.TriggerCallbackThread; +import com.xxl.job.core.util.AdminApiUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; @@ -29,7 +30,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe private String ip; private int port = 9999; private String appName; - public static String adminAddresses; + private String adminAddresses; public static String logPath; public void setIp(String ip) { @@ -51,6 +52,9 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe // ---------------------------------- job server ------------------------------------ private NetComServerFactory serverFactory = new NetComServerFactory(); public void start() throws Exception { + // admin api util init + AdminApiUtil.init(adminAddresses); + // executor start NetComServerFactory.putService(ExecutorBiz.class, new ExecutorBizImpl()); serverFactory.start(port, ip, appName); diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java b/xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java index 8ea6dba36d07893ff3fbaf4a834dee2dcb967b04..96646d65ee881e93c0b64632d4e0b3ff2129832a 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java @@ -24,7 +24,9 @@ public class ExecutorRegistryThread extends Thread { private Thread registryThread; private boolean toStop = false; public void start(final int port, final String ip, final String appName){ - if (appName==null || appName.trim().length()==0) { + + // valid + if (AdminApiUtil.allowCallApi && (appName!=null && appName.trim().length()>0) ) { logger.warn(">>>>>>>>>>>> xxl-job, executor registry config fail"); return; } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/util/AdminApiUtil.java b/xxl-job-core/src/main/java/com/xxl/job/core/util/AdminApiUtil.java index 4298f3bc02bc298583b163df7331d99cab876321..eea8d3c6a1ed7d08798c7bb40c0758d03f4b807d 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/util/AdminApiUtil.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/util/AdminApiUtil.java @@ -1,7 +1,6 @@ package com.xxl.job.core.util; import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.executor.XxlJobExecutor; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; @@ -15,7 +14,9 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author xuxueli 2017-05-10 21:28:15 @@ -26,19 +27,31 @@ public class AdminApiUtil { public static final String CALLBACK = "/api/callback"; public static final String REGISTRY = "/api/registry"; - public static ReturnT callApiFailover(String subUrl, Object requestObj) throws Exception { + private static List adminAddressList = null; + public static boolean allowCallApi = true; + public static void init(String adminAddresses){ // admin assress list - List adminAddressList = new ArrayList(); - if (XxlJobExecutor.adminAddresses != null) { - for (String adminAddressItem: XxlJobExecutor.adminAddresses.split(",")) { - if (adminAddressItem.trim().length()>0 && !adminAddressList.contains(adminAddressItem)) { - adminAddressList.add(adminAddressItem); + if (adminAddresses != null) { + Set adminAddressSet = new HashSet(); + for (String adminAddressItem: adminAddresses.split(",")) { + if (adminAddressItem.trim().length()>0 && !adminAddressSet.contains(adminAddressItem)) { + adminAddressSet.add(adminAddressItem); } } + if (adminAddressSet==null || adminAddressSet.size()==0) { + adminAddressList = new ArrayList(adminAddressSet); + } } - if (adminAddressList==null || adminAddressList.size()==0) { - return ReturnT.FAIL; + + // parse + allowCallApi = (adminAddressList!=null && adminAddressList.size()>0); + } + + public static ReturnT callApiFailover(String subUrl, Object requestObj) throws Exception { + + if (!allowCallApi) { + return new ReturnT(ReturnT.FAIL_CODE, "allowCallback fail."); } for (String adminAddress: adminAddressList) {