解決SpringBoot在使用反序列化時遇到的型別轉換異常
阿新 • • 發佈:2021-11-28
應用場景:本人訓練好了一個SVM的分類模型,在呼叫時,載入檔案轉換為LinearSVMModel(定義好的類)時,報出如下異常
java.lang.ClassCastException
出現這種情況的原因大致有三種:
- 檔案的路徑不對。
- 檔案的內容並不是要轉換的類序列化而成的。
- 也就是我出現的情況,當Springboot引入了DevTools依賴時,會出現該問題
<!--熱部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
就是這個熱部署的原因,當使用SpringBoot 的 DevTools時,其實該工具是具有快取效果的。當物件被序列化到快取裡時,當前應用的類載入器是C1,當你改變了一些程式碼或者配置檔案的時候,DevTools 工具將會自動重新啟動這個容器,並且建立一個新的類載入器 C2. 這時候呼叫這個具有快取的方法時,快取管理將會從快取裡找到該條快取記錄並進行反序列化操作。如果快取庫不考慮上下文的話,也就是沒注意到類載入器的變化時,該物件將會有錯誤的類載入器。其實就是因上下文類載入器不同而產生這樣的錯誤。
刪掉這個熱部署後問題解決