内部系统集成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下面这里直接获取对象的注解信息,因为代理对象类上没有对应注解,因此这里一直进不去,导致执行器无法注册上。

内部系统集成XXl-JOB踩过的那些坑_第1张图片

    /**
	 * 获取代理的的实际对象
	 * 
	 * @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,否则中央调动器执行日志会一直是调度成功执行结果失败

内部系统集成XXl-JOB踩过的那些坑_第2张图片

四、执行器一直返回执行器没有500的错误,就是因为我上面第二点导致的,虽然服务注册成功,但是对应的执行器没有注册成功。

你可能感兴趣的:(XXL)