一、問題1 以內部系統充當執行器,xxl-job admin作爲調度中心,執行器無論怎麼配置,都沒有註冊到註冊中心中
原因:在xxl官方提供的xxl_job數據庫腳本中僅僅初始化了一個名字爲xxl-job-executor-sample的分組,但是我在配置執行器的時候將本地的properties配置文件中xxl.job.executor.appname的值修改爲rzx-job-executor-zjpt,appname和原來的組名不一致,導致了沒錯註冊中心都沒有找到執行器
解決方案:在xxl_job數據庫中,插入一個分組,分組名稱和執行器名稱保持一致(數據庫一定要注意)
INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `order`, `address_type`, `address_list`) VALUES (2, 'rzx-job-executor-zjpt', 'syn-platform', 1, 0, NULL);
二、在整合spring傳統項目的過程中,由於添加了@JobHandler註冊的執行器類都繼承了IJobHandler接口,在從spring中獲取對象時,得到的是代理類,xxl下面這裏直接獲取對象的註解信息,因爲代理對象類上沒有對應註解,因此這裏一直進不去,導致執行器無法註冊上。
/**
* 獲取代理的的實際對象
*
* @param proxy
* @return
* @throws Exception
*/
private static Object getJdkDynamicProxyTargetObject(Object proxy)
throws Exception {
Field h = proxy.getClass().getSuperclass().getDeclaredField("h");
h.setAccessible(true);
AopProxy aopProxy = (AopProxy) h.get(proxy);
Field advised = aopProxy.getClass().getDeclaredField("advised");
advised.setAccessible(true);
Object target = ((AdvisedSupport) advised.get(aopProxy))
.getTargetSource().getTarget();
return target;
}
解決方案是,下載xxl-job-core源碼,修改上面這段邏輯,然後重新將修改後的項安裝到本地倉庫,executor中引入我們修改的源碼項目,例如我將xxl-job-core修改爲xxl-job-core-wiki,修改後將這個項目安裝到本地倉庫,執行器引入xxl-job-core-wiki,代碼修改如上所示。
三、調度器,必須顯示返回SUCCESS/FAIL,否則中央調動器執行日誌會一直是調度成功執行結果失敗
四、執行器一直返回執行器沒有500的錯誤,就是因爲我上面第二點導致的,雖然服務註冊成功,但是對應的執行器沒有註冊成功。