elasticjob遇到问题总结

来源:互联网 发布:青少年网瘾数据2016年 编辑:程序博客网 时间:2024/05/16 15:23
上文介绍了elasticJob具体是干什么的?这里在实际操作中出现的问题进行说明:

公司需要做一个对别的公司推送过来的订单,进行有效校验,所以需要定时任务。项目中完全使用
通过spring进行管理。

第一步:建立一个job,这个属于业务需要的范畴的。

第二步,建立定时任务,需要通过simpleJob类型的。

看之前代码的注释,当初是利用了spring的自动注入的方式进行的,然后定时任务一直没有生效,然后就换了一种方式,创建insurnceRuleJob 的实例。

问题 1:这里有个严重的问题,就是spring按道理进行配置后,自动注入肯定是没有问题,我在没有全部测试就急忙采用其他的方式,因为这个小功能挺着急的,所以按照这种方式就开始了,本地和测试环境都没有任何问题。但是到了生产环境,由于我们也不是实时关注这个,等到订单推送的时候,定时任务一直生效不了,zookeeper上面表示占用太多的连接,一直排查不出问题。然后把zookeeper连接清掉,同时重启zookeeper才可以。
等到第二次推送订单的时候还是一样的状况,磁盘直接不够用。

排查问题:用jvm监控工具,发现定时任务的时候创建实例一直不释放资源,时间久,就会把内存吃满,后来排查到代码,坑爹的发现,我用这种方式加载,实际上是加载两次sping的配置文件,而我的elasticjob的配置同时嵌入了spring的主配置的里面,这样每次定时任务就创建实例。导致坑爹问题。

还是使用自动注入,之前让我无法自动注入的问题就神奇的好了,可能是我操作不当。
接下来看我们简单的配置文件:

关于配置项,在官网上说明的非常详细

问题2:无法更新cron表达式
问题解决:cron表达式就是定时的时间控制,修改了cron表达式就会修改定时的时间,但是一开始修改了cron并没有任何反应,overwrite的配置默认是设置false,修改即可。
Elastic-Job-Lite采用无中心化设计,若每个客户端的配置不一致,不做控制的话,最后一个启动的客户端配置将会成为注册中心的最终配置。
Elastic-Job-Lite提出了overwrite概念,可通过JobConfiguration或Spring命名空间配置。overwrite=true即允许客户端配置覆盖注册中心,反之则不允许。如果注册中心无相关作业的配置,则无论overwrite是否配置,客户端配置都将写入注册中心

原创粉丝点击