浏览代码

调用destroy方法的时候,jobHandlerRepository也要清空

773899172@qq.com 6 年前
父节点
当前提交
1b90a9ca52
共有 1 个文件被更改,包括 13 次插入0 次删除
  1. 13 0
      xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java

+ 13 - 0
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java 查看文件

@@ -91,6 +91,12 @@ public class XxlJobExecutor  {
91 91
             }
92 92
             jobThreadRepository.clear();
93 93
         }
94
+        if(jobHandlerRepository.size() >0 ){
95
+            for (Map.Entry<String, IJobHandler> item: jobHandlerRepository.entrySet()){
96
+                removeJobHandler(item.getKey(), "web container destroy and kill the jod handler");
97
+            }
98
+            jobHandlerRepository.clear();
99
+        }
94 100
 
95 101
 
96 102
         // destory JobLogFileCleanThread
@@ -103,6 +109,13 @@ public class XxlJobExecutor  {
103 109
         stopRpcProvider();
104 110
     }
105 111
 
112
+    private void removeJobHandler(String handlerId, String removeOldReason){
113
+        IJobHandler oldJobHandler = jobHandlerRepository.remove(handlerId);
114
+        if (oldJobHandler != null) {
115
+            oldJobHandler.destroy();
116
+        }
117
+    }
118
+
106 119
 
107 120
     // ---------------------- admin-client (rpc invoker) ----------------------
108 121
     private static List<AdminBiz> adminBizList;