XXL-JOB-Admin后台手动执行任务传参过长被截断问题解决
文章目录
- 1.问题
- 2.解决
- 1.方法一
- 2.方法二
- 3.总结
1.问题
由于之前遇到一个定时任务有好多天的执行失败了,然后排查问题修复代码之后(或者一些其他原因导致订单任务执行失败,比如之前那个accessToken设置的问题导致定时任务会执行失败),然后就需要手动去一天一天的触发执行,如果你写的那个job的参数拓展性很好,可以传入一个参数解析之后把失败那些天的数据重新查询之后触发执行,那么这个组装的参数就会很长很长,在后台管理业页面点击执行任务然后把参数复制粘贴到对应的任务参数那一栏,如果参数非常的长,输入粘贴的参数就会被截断,然后提交任务执行就会导致参数解析异常而失败。
任务管理里面点击对应任务执行一次弹框界面如下:
2.解决
那这个问题如何解决呢?答案很简单,如果你对XXL-JOB的原理和源码很熟悉的话,可以说是小kiss的,直接上方法:
1.方法一
可以将参数拆分小一些,然后触发粘贴上去执行,这种是一种有效的笨办法。
2.方法二
可以使用postMan或者Apifox等HTTP的接口请求工具,先在浏览器登录XXL-JOB的admin后台账号,然后找到对应的任务
抓取到对应任务执行的触发接口url,然后将参数也抓取到,还要在请求头上带上一个cookie的参数,相关参数可以登录admin后台,F12找到对应的地址和相关的参数:
url:http://ip:port/xxl-job-admin/jobinfo/trigger
## xxl-job-admin是一个服务路径,默认是下面这个
server.servlet.context-path=/xxl-job-admin
cookie:XXL_JOB_LOGIN_IDENTITY=xxxxxxxxxxxxxxx
admin后端触发执行的控制器方法是在JobInfoController类的如下方法:
@RequestMapping("/trigger")@ResponseBody//@PermissionLimit(limit = false)public ReturnT<String> triggerJob(int id, String executorParam, String addressList) {// force cover job paramif (executorParam == null) {executorParam = "";}JobTriggerPoolHelper.trigger(id, TriggerTypeEnum.MANUAL, -1, null, executorParam, addressList);return ReturnT.SUCCESS;}#通过源码可以知道,addressList的格式如下:
private String addressList; // 执行器地址列表,多地址逗号分隔(手动录入)
addressList参数可以去执行器管理找到对应服务客户端根据AppName有一个OnLine机器地址点查看弹框里面显示的就有(需要注意的是这个是client自动注册上来的,但是有的时候默默奇妙的注册不上了,是因为你使用的端口已经被其它服务占用了导致你的这个XXL-JOB的客户端没有注册到admin上,所以就需要跟换一个空闲的端口就可以了)
http请求接口调用截图:这个trigger接口是通过表单提交的,不是params也不是body,这个可以在页面中看到请求类型的body是一个form-data的类型
执行结果:
3.总结
到此,这个后台提交过长参数执行被截断的问题就可以通过另外一种方式解决,我之前就是通过那个笨办法搞的,后面我理解了它的原理和看了它的源码之后,我思路一转,可不可以用http请求工具调用一下,然后就去搞了试一下,结果接搞成了,希望我的分享对你有所帮助和启发,请一键三连,么么么哒!