內部系統集成XXl-JOB踩過的那些坑

一、問題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的錯誤,就是因爲我上面第二點導致的,雖然服務註冊成功,但是對應的執行器沒有註冊成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章