调度计划保存时,空指针异常原创
金蝶云社区-吴锐雄
吴锐雄
5人赞赏了该文章 1,390次浏览 未经作者许可,禁止转载编辑于2021年09月15日 17:28:30


看完文章,点赞收藏,谢谢您嘞


调度相关文章以及一些异常场景的解决方案:

https://vip.kingdee.com/article/218298504655816448


最近给伙伴排查一个调度保存失败,抛空指针的问题,给出解决方案。


异常信息

image.png

调用堆栈:
kd.bos.exception.KDException: null
	at kd.bos.service.operation.OperationServiceImpl.localInvokeOperation(OperationServiceImpl.java:115)
	at kd.bos.entity.operate.Save.callBillOperationService(Save.java:78)
	at kd.bos.entity.operate.DefaultEntityOperate.invokeBillOperation(DefaultEntityOperate.java:466)
	at kd.bos.entity.operate.DefaultEntityOperate.callEntityOperate(DefaultEntityOperate.java:408)
	at kd.bos.form.operate.EntityOperate.invokeOperation(EntityOperate.java:52)
	at kd.bos.form.operate.FormOperate.execute(FormOperate.java:245)
。。。。。。。。
。。。。。。。。省略部分异常日志
。。。。。。。。
Caused by: java.lang.NullPointerException
	at kd.bos.schedule.serviceImpl.ScheduleManagerImpl.sendScheudleChangedMessage(ScheduleManagerImpl.java:48)
	at kd.bos.schedule.serviceImpl.ScheduleManagerImpl.afterUpdateSchedule(ScheduleManagerImpl.java:38)
	at kd.bos.schedule.opplugin.ScheduleOpPlugin.beforeExecuteOperationTransaction(ScheduleOpPlugin.java:37)
	at kd.bos.entity.plugin.OperationServicePlugInProxy.fireBeforeExecuteOperationTransaction(OperationServicePlugInProxy.java:228)
	at kd.bos.service.operation.EntityOperateService.fireBeforeExecuteOperationTransaction(EntityOperateService.java:1300)
	at kd.bos.service.operation.EntityOperateService.doExcete(EntityOperateService.java:485)
	at kd.bos.service.operation.EntityOperateService.excute(EntityOperateService.java:337)
	at kd.bos.service.operation.OperationServiceImpl.localInvokeOperation(OperationServiceImpl.java:103)
	... 94 more


打开调度监控,查看信息,发现界面很卡,一直处于加载中。

image.png

image.png


异常原因分析和排查方案

调度服务ScheduleService,应该是没有正常运行的,因为调度监控一直在加载中。

通常情况下,调度服务ScheduleService没有启动成功,都是配置异常导致的,因为ScheduleService要正常工作,必须要依赖于zookeeper,通过zookeeper来进行调度任务的分配,分给到挂在注册中心zookeeper下面的cosmic来执行


(1)

于是,排查了伙伴的集群环境,进入monitor,

关于monitor,请查看知识区官方文档:

https://club.kdcloud.com/article/86828762196557056


发现在集群环境上搭建了2台cosmic。

勾选,进入1台cosmic的系统属性,

image.png


(2)

搜索Schedule.zk,查看系统属性,发现ip地址不对。

这里的ip地址必须是 注册中心zookeeper的地址和端口号,当前伙伴的zk并不是部署在本机。

image.png


(3)

登录mc,在公共配置方案里面,查看Schedule.zk相关配置,发现这个配置是错误的

image.png




解决方案

(1)

发现了公共配置方案里面,Schedule.zk相关配置是错误的,所以把ip地址修改为 zookeeper所在的ip地址。image.png


(2)

修改完成之后点击保存

image.png


(3)

改了配置方案之后,发布集群,把最新的参数发布到zookeeper上

image.png


(4)

发布完成之后,重启cosmic,如果还有问题,同时重启cosmic和zookeeper

因为调度任务ScheduleService是在cosmic苍穹)启动时,执行初始化的。

所以,如果ScheduleService本身初始化失败,没有启动,就需要重启苍穹。


(5)

查看monitor

image.png


(6)

重启cosmic后,查看日志,发现ScheduleService已经启动

image.png


(7)

之后保存就能保存成功了:

image.png


(8)

调度监控也能正常运行了:

image.png


总结

1.如果遇到调度创建异常,先排查monitor上面的zookeeper相关属性。

2.修改了mc的公共环境变量之后,必须发布到集群。

3.遇到调度任务ScheduleService异常,或者是其他的Service异常,应该是某些属性配置异常了,可以从相关属性着手排查。

4.修改Service相关属性参数之后(例如文章里面的 ),最后一步,必须重启cosmic,让ScheduleService重新初始化。






赞 5