内部系统集成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的错误,就是因为我上面第二点导致的,虽然服务注册成功,但是对应的执行器没有注册成功。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值