1. 程式人生 > 其它 >解決SpringBoot在使用反序列化時遇到的型別轉換異常

解決SpringBoot在使用反序列化時遇到的型別轉換異常

應用場景:本人訓練好了一個SVM的分類模型,在呼叫時,載入檔案轉換為LinearSVMModel(定義好的類)時,報出如下異常

java.lang.ClassCastException
出現這種情況的原因大致有三種:

  1. 檔案的路徑不對。
  2. 檔案的內容並不是要轉換的類序列化而成的。
  3. 也就是我出現的情況,當Springboot引入了DevTools依賴時,會出現該問題
        <!--熱部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

就是這個熱部署的原因,當使用SpringBoot 的 DevTools時,其實該工具是具有快取效果的。當物件被序列化到快取裡時,當前應用的類載入器是C1,當你改變了一些程式碼或者配置檔案的時候,DevTools 工具將會自動重新啟動這個容器,並且建立一個新的類載入器 C2. 這時候呼叫這個具有快取的方法時,快取管理將會從快取裡找到該條快取記錄並進行反序列化操作。如果快取庫不考慮上下文的話,也就是沒注意到類載入器的變化時,該物件將會有錯誤的類載入器。其實就是因上下文類載入器不同而產生這樣的錯誤。

刪掉這個熱部署後問題解決