Procházet zdrojové kódy

Merge pull request #2537 from vipweihua/master

小优化,没有任何功能性增强和bug修复,尝试初次pr
许雪里 před 3 roky
rodič
revize
8e102f8c3e

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

@@ -3,6 +3,8 @@ package com.xxl.job.core.executor;
 import com.xxl.job.core.biz.AdminBiz;
 import com.xxl.job.core.biz.client.AdminBizClient;
 import com.xxl.job.core.handler.IJobHandler;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.handler.impl.MethodJobHandler;
 import com.xxl.job.core.log.XxlJobFileAppender;
 import com.xxl.job.core.server.EmbedServer;
 import com.xxl.job.core.thread.JobLogFileCleanThread;
@@ -13,6 +15,7 @@ import com.xxl.job.core.util.NetUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -110,6 +113,50 @@ public class XxlJobExecutor  {
 
     }
 
+    protected void registerJobHandler(XxlJob xxlJob, Object bean, Method executeMethod){
+        if (xxlJob == null) {
+            return;
+        }
+
+        String name = xxlJob.value();
+        //make and simplify the variables since they'll be called several times later
+        Class<?> clazz = bean.getClass();
+        String methodName = executeMethod.getName();
+        if (name.trim().length() == 0) {
+            throw new RuntimeException("xxl-job method-jobhandler name invalid, for[" + clazz + "#" + methodName + "] .");
+        }
+        if (loadJobHandler(name) != null) {
+            throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts.");
+        }
+
+        executeMethod.setAccessible(true);
+
+        // init and destroy
+        Method initMethod = null;
+        Method destroyMethod = null;
+
+        if (xxlJob.init().trim().length() > 0) {
+            try {
+                initMethod = clazz.getDeclaredMethod(xxlJob.init());
+                initMethod.setAccessible(true);
+            } catch (NoSuchMethodException e) {
+                throw new RuntimeException("xxl-job method-jobhandler initMethod invalid, for[" + clazz + "#" + methodName + "] .");
+            }
+        }
+        if (xxlJob.destroy().trim().length() > 0) {
+            try {
+                destroyMethod = clazz.getDeclaredMethod(xxlJob.destroy());
+                destroyMethod.setAccessible(true);
+            } catch (NoSuchMethodException e) {
+                throw new RuntimeException("xxl-job method-jobhandler destroyMethod invalid, for[" + clazz + "#" + methodName + "] .");
+            }
+        }
+
+        // registry jobhandler
+        registJobHandler(name, new MethodJobHandler(bean, executeMethod, initMethod, destroyMethod));
+
+    }
+
 
     // ---------------------- admin-client (rpc invoker) ----------------------
     private static List<AdminBiz> adminBizList;

+ 2 - 52
xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSimpleExecutor.java

@@ -57,62 +57,12 @@ public class XxlJobSimpleExecutor extends XxlJobExecutor {
         for (Object bean: xxlJobBeanList) {
             // method
             Method[] methods = bean.getClass().getDeclaredMethods();
-            if (methods==null || methods.length==0) {
+            if (methods.length == 0) {
                 continue;
             }
             for (Method executeMethod : methods) {
-
-                // anno
                 XxlJob xxlJob = executeMethod.getAnnotation(XxlJob.class);
-                if (xxlJob == null) {
-                    continue;
-                }
-
-                String name = xxlJob.value();
-                if (name.trim().length() == 0) {
-                    throw new RuntimeException("xxl-job method-jobhandler name invalid, for[" + bean.getClass() + "#" + executeMethod.getName() + "] .");
-                }
-                if (loadJobHandler(name) != null) {
-                    throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts.");
-                }
-
-                // execute method
-                /*if (!(method.getParameterTypes().length == 1 && method.getParameterTypes()[0].isAssignableFrom(String.class))) {
-                    throw new RuntimeException("xxl-job method-jobhandler param-classtype invalid, for[" + bean.getClass() + "#" + method.getName() + "] , " +
-                            "The correct method format like \" public ReturnT<String> execute(String param) \" .");
-                }
-                if (!method.getReturnType().isAssignableFrom(ReturnT.class)) {
-                    throw new RuntimeException("xxl-job method-jobhandler return-classtype invalid, for[" + bean.getClass() + "#" + method.getName() + "] , " +
-                            "The correct method format like \" public ReturnT<String> execute(String param) \" .");
-                }*/
-
-                executeMethod.setAccessible(true);
-
-                // init and destory
-                Method initMethod = null;
-                Method destroyMethod = null;
-
-                if (xxlJob.init().trim().length() > 0) {
-                    try {
-                        initMethod = bean.getClass().getDeclaredMethod(xxlJob.init());
-                        initMethod.setAccessible(true);
-                    } catch (NoSuchMethodException e) {
-                        throw new RuntimeException("xxl-job method-jobhandler initMethod invalid, for[" + bean.getClass() + "#" + executeMethod.getName() + "] .");
-                    }
-                }
-                if (xxlJob.destroy().trim().length() > 0) {
-                    try {
-                        destroyMethod = bean.getClass().getDeclaredMethod(xxlJob.destroy());
-                        destroyMethod.setAccessible(true);
-                    } catch (NoSuchMethodException e) {
-                        throw new RuntimeException("xxl-job method-jobhandler destroyMethod invalid, for[" + bean.getClass() + "#" + executeMethod.getName() + "] .");
-                    }
-                }
-
-                // registry jobhandler
-                registJobHandler(name, new MethodJobHandler(bean, executeMethod, initMethod, destroyMethod));
-
-
+                registerJobHandler(xxlJob, bean, executeMethod);
             }
 
         }

+ 1 - 48
xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java

@@ -105,56 +105,9 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC
             for (Map.Entry<Method, XxlJob> methodXxlJobEntry : annotatedMethods.entrySet()) {
                 Method executeMethod = methodXxlJobEntry.getKey();
                 XxlJob xxlJob = methodXxlJobEntry.getValue();
-                if (xxlJob == null) {
-                    continue;
-                }
-
-                String name = xxlJob.value();
-                if (name.trim().length() == 0) {
-                    throw new RuntimeException("xxl-job method-jobhandler name invalid, for[" + bean.getClass() + "#" + executeMethod.getName() + "] .");
-                }
-                if (loadJobHandler(name) != null) {
-                    throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts.");
-                }
-
-                // execute method
-                /*if (!(method.getParameterTypes().length == 1 && method.getParameterTypes()[0].isAssignableFrom(String.class))) {
-                    throw new RuntimeException("xxl-job method-jobhandler param-classtype invalid, for[" + bean.getClass() + "#" + method.getName() + "] , " +
-                            "The correct method format like \" public ReturnT<String> execute(String param) \" .");
-                }
-                if (!method.getReturnType().isAssignableFrom(ReturnT.class)) {
-                    throw new RuntimeException("xxl-job method-jobhandler return-classtype invalid, for[" + bean.getClass() + "#" + method.getName() + "] , " +
-                            "The correct method format like \" public ReturnT<String> execute(String param) \" .");
-                }*/
-
-                executeMethod.setAccessible(true);
-
-                // init and destory
-                Method initMethod = null;
-                Method destroyMethod = null;
-
-                if (xxlJob.init().trim().length() > 0) {
-                    try {
-                        initMethod = bean.getClass().getDeclaredMethod(xxlJob.init());
-                        initMethod.setAccessible(true);
-                    } catch (NoSuchMethodException e) {
-                        throw new RuntimeException("xxl-job method-jobhandler initMethod invalid, for[" + bean.getClass() + "#" + executeMethod.getName() + "] .");
-                    }
-                }
-                if (xxlJob.destroy().trim().length() > 0) {
-                    try {
-                        destroyMethod = bean.getClass().getDeclaredMethod(xxlJob.destroy());
-                        destroyMethod.setAccessible(true);
-                    } catch (NoSuchMethodException e) {
-                        throw new RuntimeException("xxl-job method-jobhandler destroyMethod invalid, for[" + bean.getClass() + "#" + executeMethod.getName() + "] .");
-                    }
-                }
-
-                // registry jobhandler
-                registJobHandler(name, new MethodJobHandler(bean, executeMethod, initMethod, destroyMethod));
+                registerJobHandler(xxlJob, bean, executeMethod);
             }
         }
-
     }
 
     // ---------------------- applicationContext ----------------------

+ 21 - 1
xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java

@@ -245,8 +245,28 @@ public class SampleXxlJob {
     public void init(){
         logger.info("init");
     }
+
     public void destroy(){
-        logger.info("destory");
+        logger.info("destroy");
+    }
+
+    /**
+     * 6、生命周期任务示例:任务初始化与销毁时,支持private方法(但不推荐);
+     */
+    @XxlJob(value = "demoJobHandler3", init = "initForDemoJobHandler3", destroy = "destroyForDemoJobHandler3")
+    public void demoJobHandler3() throws Exception {
+        XxlJobHelper.log("XXL-JOB, Hello World.");
+    }
+
+    private void initForDemoJobHandler3(){
+        logger.info("initForDemoJobHandler3");
+    }
+
+    /**
+     * 演示private方法也可以被访问且执行
+     */
+    public void destroyForDemoJobHandler3(){
+        logger.info("destroyForDemoJobHandler3");
     }