在現實開發過程中,生産環境永遠比開發環境複雜,如果開發環境無法還原現場問題,就需要開發人員遠端調試現場問題,而且有些bug運作在伺服器上,隐藏較深,通過日志也排查不出問題,是以可以采用對 jar 包進行遠端調試來解決問題。
最近對一版SSM的舊項目進行了重構,采用spring cloud微服務的形式以分布式開發的模式開發的功能,其中用到了fastDFS,在SSM項目裡Fastdfs本地和建構完之後的項目使用過程中都沒有問題,但是在spring boot架構下本地雖然沒問題,但是建構完之後調用下載下傳檔案的接口的時候提示找不到fastDFS的配置檔案。
原因是由于SSM和SpringBoot項目打包建構完之後的形式不一樣,SSM建構完是war 包,而SpringBoot建構完是jar包,jar包在運作過程中有些檔案不會展開去執行,是以會出現找不到fastDFS配置檔案的錯誤。
經過在jar包中不斷調試,發現代碼走到這裡發生了差别,讀取檔案路徑以classLoader().getResourceAsStream(filePath)讀取的時候會自動給檔案路徑加上classPath,是以導緻檔案路徑錯誤,我在傳入的時候檔案路徑不加classpath字首就可以了。問題成功解決!(但是在war包中這樣執行是沒有問題的)

1、開發工具 idea
2、項目架構 springboot
3、項目管理工具 maven
從控制台找到jar包的生成路徑:
在jar包所在路徑下打開powershell視窗,輸入指令:
看到下面的界面說明打包成功,jar包沒有問題:
可以在本地測試一下,在浏覽器調用一個接口看是否能有傳回内容。
參數說明:
Host:輸入伺服器位址(或電腦ip位址)
Port:用戶端請求連接配接的端口号(自定義)
transport:監聽Socket端口連接配接方式(也可以使用dt_shmem共享記憶體方式,但限于Windows機器,并且服務提供端和調試端隻能位于同一台機);
server:server=y 表示目前調試伺服器,=n表示目前的是調試用戶端
suspend:suspend=n表示啟動時不中斷,一般用于設定主動連接配接;suspend=y 表示啟動時就進入調試模式,一般用于被動連接配接。
(注意:如果設定為y,它會阻塞程式運作,直到有用戶端連接配接到對應的監聽端口,程式才真正開始執行。有時候程式一閃而過,還沒來得及在本地加載上代碼程式就執行完了,這種情況就可以使用suspend參數)
1、在powershell中輸入指令啟動jar包
2、jar包啟動完成後在idea中啟動剛才建立的remote loca-jar,出現下面的界面說明啟動成功。
現在在idea中調試代碼就相當于在調試jar包裡的代碼。
3、可以在powershell中看到打出的日志資訊,現在就可以在idea中調試jar裡的代碼去排查問題了。