因為沒有任何日志打印(也可能是我logback配置的問題),翻百度谷歌到的好多文章也沒有結論,翻閱官方文檔中文翻譯版,也沒發現說明,再去看英文版,也沒任何資料。
最后無奈只好調試進源碼,首先找斷點位置,應該是StandardService這個類中,因為打印log顯示行號會對系統有相當大的性能開銷,所以一般也不開啟,當然自己測試到時候是可以開啟的,並且看着源碼位置設置斷點就可以了。但現在直接通過打印的日志信息進行查找吧,Stopping service 這個字符串算是一個入口,以idea為例,搜索整個項目包含Libraries,可以搜到
是在配置文件里的。那么繼續搜索這個屬性名。
找到了源碼位置,在打印的日志這里設置一個斷點
開始斷點,這個記錄日志的位置不是我們的目標,我們的目標是為了找出引發關閉的代碼在哪。debug的時候根據調用棧一層一層的往前找
慢慢找就能發現問題
這里發現有一個異常被捕獲到了。查看這個異常的信息,發現是Unexpected use of scheduler. 這個異常導致的,現在找到了算是一個線索,是關於調度器,項目中本來沒有啟用spring boot的調度器,但是項目維護了一個調度器到bean。
這時候想不通了,還是問問百度谷歌他們怎么看吧。果然有個小哥跟我問題一樣
幸運到是,他到問題有人回答了。原來是spring websocket 與項目中使用調度器有沖突。。。
回答的老哥也很給力,給出了springboot 的issues中的解決方案。按這個答案,在創建自己的調度器時,再聲明一個給spring用的調度器就可以了。
問題解決。。