buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

面试官说“一开始工资不会给你太高,你可以接受吗?” 怎么怼回去??

 

面试官:一开始工资不会给你太高,你可以接受吗?

程序员:我一开始工作表现不会太好,你可以接受吗? 

面试官:emmmmmm

 


 

面试官:“你简历上写着说你心算速度很快,那我问问你,十九乘以十七是多少?”

程序员脱口而出:“三十六!”

面试官:“这也差太远了吧。”

程序员:“但是很快没错吧。”


  

----我是分割线,重点看下面---- 

----NoSuchBeanDefinitionException导致spring服务无法启动---- 


draft_job应用,测试环境,Jenkins构建完成,QA反映执行job没反应。xshell连接到服务器上查看log,发现有如下错误导致服务未正常启动。

2019-07-24 22:04:43,309 INFO  [main-SendThread(10.0.2.110:2181)] (ClientCnxn.java:1032) - Opening socket connection to server 10.0.2.110/10.0.2.110:2181. Will not attempt to authenticate using SASL (unknown error)
2019-07-24 22:04:43,355 INFO  [main-SendThread(10.0.2.110:2181)] (ClientCnxn.java:876) - Socket connection established to 10.0.2.110/10.0.2.110:2181, initiating session
2019-07-24 22:04:43,364 INFO  [main-SendThread(10.0.2.110:2181)] (ClientCnxn.java:1299) - Session establishment complete on server 10.0.2.110/10.0.2.110:2181, sessionid = 0x16b69ed782c004c, negotiated timeout = 40000
2019-07-24 22:04:43,367 INFO  [main-EventThread] (ConnectionStateManager.java:228) - State change: CONNECTED
2019-07-24 22:04:43,428 WARN  [main] (AbstractApplicationContext.java:549) - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'creditLimitAnalyseReportJob': Unsatisfied dependency expressed through field 'creditLimitReportServiceClient': Error creating bean with name 'creditLimitReportServiceClient': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'emaxcardClient' is defined; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'creditLimitReportServiceClient': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'emaxcardClient' is defined
2019-07-24 22:04:43,930 INFO  [Curator-Framework-0] (CuratorFrameworkImpl.java:821) - backgroundOperationsLoop exiting
2019-07-24 22:04:43,933 INFO  [main] (ZooKeeper.java:684) - Session: 0x16b69ed782c004c closed
2019-07-24 22:04:43,934 INFO  [main-EventThread] (ClientCnxn.java:519) - EventThread shut down for session: 0x16b69ed782c004c

 

反馈给开发这个creditLimitAnalyseReportJob的唐玮,他经过重新构建Jenkins,解决了。
当时手头有其他事儿,也就没有在意。

晚上上线,发现生产环境在启动服务时也有这个错误。而且通过重新构建的方式并无卵用。

于是,我们3个人开始细查这个问题。
这个错误log信息很明确:名字是emaxcardClient的bean没有声明,导致context初始化异常。

可是,整个工程也查不到emaxcardClient。

各种排查,各种分析,各种怀疑。

后来我的怀疑被证明是解决问题的关键。这个项目的代码是从我们以前的pay2.0项目copy过来的。上面错误里的creditLimitReportServiceClient派生自BaseClient,BaseClient是在draft_job所依赖的draft_common包里定义的。BaseClient里有对如下@Resource注解,这里是 "draftClient"。然后去翻看之前pay2.0项目与之对应的emax_common代码,那个BaseClient里面是"emaxcardClient"。 因此,我推断,错误log里提到的creditLimitReportServiceClient阴差阳错的继承了emax_common包的BaseClient了??
我一边是先让运维把构建出来的zip包给我,好看看lib里是否真有emax_common;一边去查看pom文件里定义的依赖了。

本地pom未发现对emax-common的依赖。

运维把zip包发给我们之后,果然,lib里有emax_common。那么,pom里没有直接依赖emax_common,是不是存在间接依赖呢?我把焦点锁定在了一个名叫warning_thrift的包。我们3个人都无法确定,不过唐玮同学说,这个依赖可以拿掉。那就先拿掉试试再说。
让运维重新构建Jenkins后,果然,job可以正常启动了!!

package com.emaxcard.rpc.client;

public abstract class BaseClient {
    @Resource(name = "draftClient")
    private ThriftClientProxy clientProxy;
    private static final Logger log = LoggerFactory.getLogger(BaseClient.class);

 

draft项目draft_common是从pay2.0项目的emax_common复制过来的,其中,BaseClient类的package未曾修改。当draft_job同时依赖了draft_common和emax_common,那么就出现了上面的情况。所以,为了避免日后再出现类似问题,还是改一下package比较靠谱。

posted on 2019-07-26 00:00  buguge  阅读(581)  评论(0编辑  收藏  举报