SpringbootがRedisを使用して逆シーケンス化で発生したタイプ変換異常の解決


今日springbootプロジェクトでredisの逆シーケンス化が使用されました.
Cart cart = SerializationUtils.deserialize(car);

 
その後、プロジェクトがアクセスを開始したときにエラーが発生しました.異常情報は次のとおりです.
java.lang.ClassCastException: com.erow.vo.Cart cannot be cast to com.erow.vo.Cart

 
長い間変更して、何が起こっているのか分からないが、最後にやっと異常の原因を見つけた.
        
        
            org.springframework.boot
            spring-boot-devtools
            true
        

このホットデプロイの理由は、SpringBootのDevToolsを使用する場合、このツールはキャッシュ効果があります.
オブジェクトがキャッシュにシーケンス化すると、現在適用されているクラスローダはC 1であり、コードやプロファイルを変更すると、DevToolsツールは自動的にこのコンテナを再起動し、新しいクラスローダC 2を作成する.このキャッシュ付きメソッドを呼び出すと、キャッシュ管理はキャッシュからキャッシュレコードを見つけて逆シーケンス化します.キャッシュ・ライブラリがコンテキストを考慮しない場合、つまりクラス・ローダの変化に気づかない場合、オブジェクトにエラーのクラス・ローダがあります.コンテキストクラスのローダが異なるため、このようなエラーが発生します.
このホット・デプロイメントを削除して問題を解決