xxl-job的Expected BEGIN_OBJECT but was STRING at line 1 column 1 path$

最近工作的时候使用xxl-job组件做定时任务,碰到了一个异常,在网上查没有查到相关结果,后来自己解决了,记录下来以供后续有类似异常的人作为修复参考.

异常信息截图如下:

异常抛出的机制是,启动项目抛出一次,后续每间隔几秒钟抛出一次,十分频繁

可以看出,提示信息是json转化异常,期望得到的值与实际值不匹配

这个提示是有一些误导的,实际上的情况可能和这个报错有出入

我个人根据报错机制,猜测是xxl-job访问连接异常,每隔几秒一次心跳检测报错.

后来的发现印证了我的猜测,xxl-job会每隔一段时间自动访问配置文件中你配置的adress,如果该地址不能被访问到(内外网不互通/映射等原因),就会得到一个访问error页面,导致xxl-job收到的信息是该页面的错误信息,从而不能正确解析.

通过tcping工具测试xxl-job的地址,发现地址是通的,也就是项目adress配置不对,再结合修改配置文件调试,证实确实是该原因导致.

排雷如下:

在xxl-job的实际工作中,我们在xxl-job的web页面应当采手动配置映射器的adress.

需要注意,当采用手动配置执行器,项目配置文件的地址是xxl-job访问的地址,访问地址并不需要和web页面的xxl-job执行器地址保持一致,只需要执行器AppName配置一致即可

但是问题来了,每次项目部署上,内网地址是随机分配的,adress不能写死,那应该如何配置呢?

这里用到了ip中的特殊占位ip:0.0.0.0

解释一下

首先,0.0.0.0是不能被ping通的。0.0.0.0称为“unspecified”,即未指定(即无效的,无意义的)地址。从功能上看,一般用于某些程序/网络协议中不便使用具体ip的特殊情况(说白了就是一个用于某些比较坑的情况的“占位符”),比如DHCP客户端还未获取到ip的时候规定使用0.0.0.0作“源地址”,或者在服务器中,0.0.0.0并不是一个真实的的IP地址,它表示本机中所有的IPV4地址。服务器不指定在哪个网卡上监听时,也使用0.0.0.0,这个时候监听本机中所有IP的端口。可以用作服务端,表示本机真实的网络IP地址。

也就是项目配置adress应该为0.0.0.0,让他自己去获取网络正式地址.而xxl-job的web页面执行器配置外网调度地址即可.

最后实测,完美解决问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java-徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值