1. 問題
看到上面的錯誤 你怎么想?
包沖突?我這里不是。項目用到了zookeeper,這個類是zookeeper的核心包里的類。
控制台一直打印這個錯誤 但是項目不影響使用,奇怪!
2. 解決辦法
最后排查是項目在jenkins部署重啟之后,進程沒有啥干凈。
kill -9 id 殺掉最近一次以前的 不在保錯
3. 分析
從網上博客收到啟發
http://blog.csdn.net/li396864285/article/details/54574955
- Tomcat啟動,初始化webcontext;
- 初始化spring, spring初始某些些bean,這些bean包括了zookeeper的連接相關的bean;
- 這時zkClient(獨立線程)已經連接上服務器了,但是classloader沒有加載到org/apache/zookeeper/proto/SetWatches類;
- spring初始化失敗,導致Tomcat webcontext初始化也失敗,應用在掛起狀態,但zkClient線程還是正常的;
- zookeeper服務器重啟,zkClient開始重連,連接上zookeeper服務器;
- zkClient觸發watch的一些代碼,ClassLoader嘗試加載org/apache/zookeeper/proto/SetWatches類,但是發現找不到類,於是拋出異常;
- zkClient捕獲到異常,認為重連失敗,close掉connection,休眠幾秒之后,再次重連;
於是出現了zkClient反復重試連接zookeeper服務器,而且都是秒連秒斷的情況