1.異常信息:
Caused by: java.lang.NoClassDefFoundError: com/pingan/cfss/monitor/user/controller/UserInfoController$2
at com.pingan.cfss.monitor.user.controller.UserInfoController.getUserList(UserInfoController.java:84) ~[cfss_monitor_user/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92]
at com.pingan.pafa.papp.esa.annotation.MethodESA.invokeMethod(MethodESA.java:148) ~[pafa5-dubbox-5.3.13.jar:?]
at com.pingan.pafa.papp.esa.annotation.MethodESA.perform(MethodESA.java:59) ~[pafa5-dubbox-5.3.13.jar:?]
... 36 more
2.通用的排查方法
遇到這種異常不外呼兩種情況
1.classpath里沒有對應的class文件
2.有class文件,但是加載靜態類時,初始化靜態方法報錯。
3.問題解決過程
遇到后,猜想:我們生產環境肯定沒人刪除依賴包的怎么會少class文件,直接把1忽略了,又結合代碼,2也被忽略了,此時就懵逼了(UserInfoController這個類已經被加載了,為啥UserInfoController$2會找不到?)。
當時就在本地想了一個辦法,先把應用啟動起來,然后把target全部刪掉,發現報了一模一樣的錯誤。(問題終於被確定,是1少class)
確定后就去生產服務器查看lib包,果然什么都沒有,后來經過排查,是運維人員的定時備份日志腳本把lib也備份了(因為pafa的依賴包是放在和日志同目錄的子目錄里)
4.心得:
不要隨隨便忽略任何細節,除非你有確鑿的證據