2016-10-07 160 views
0
org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; 
    nested exception is org.springframework.core.serializer.support.SerializationFailedException: 

Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; 
    nested exception is org.springframework.core.NestedIOException: 

Failed to deserialize object type; 
    nested exception is java.lang.ClassNotFoundException: com.foo.user.model.CurrentUser 

セッション状態のRedisインスタンスを共有する2つの典型的なSpringブートアプリケーションがあります。上記のエラーは、アプリケーションにログインしようとすると直ちに発生します。SpringセッションRedisがClassNotFoundExceptionで逆シリアル化に失敗しました

私はここで何が起こっているのかよく分かりません。どちらのアプリケーションも、該当するUserモデルとSpring依存関係に同じライブラリとバージョンを使用しています。価値があるのはCurrentUserorg.springframework.security.core.userdetails.Userです。それ自体はSerializableです。

私はRedisのインスタンスを再起動しました。何かがちょっとファンキーになっていると思っていましたが、そうではありませんでした。私はすでに試したことを示していますが、ほとんどの場合、成果物が正しく構築され、アプリケーションとRedisサーバーが再起動されていることが確認されています。ちょっとしたことがあります。Serializableです。

なぜこれが表示されますか?

+0

CurrentUserのすべてのメンバーもシリアライズ可能ですか? – Snickers3192

+0

多少の質問:両方のアプリケーションでRedisの設定(具体的には直列化部分)が同じですか?私が正しく理解していれば、 'CurrentUser'は両方のアプリケーション間で共有されている外部ライブラリにありますか? Boot DevToolsを使用していますか?問題を再現するサンプルや両方のアプリの構成のうち少なくとも関連する部分では、持っていると便利です。 –

+0

スニッカー - うん。 ベドラン - どのような情報が役に立ちますか? – bvulaj

答えて

0

例外は 'デシリアライズできません' レディスに何かを保存しているように見えますが、今はデシリアライズできません。その間にserialVersionUIDを変更してもよいですか?

Redisを再起動しましたが、再起動してもエントリが保持され、存続している可能性があります。

+0

私はそれを確認します。 AWS Elasticacheは、再起動後もデータを残すことができます。 オブジェクトは変更されましたが、再起動によってストアがフラッシュされることを期待していました。 – bvulaj

+0

運がありません。クラスタと同じ問題を再作成しました。他の考え? – bvulaj

関連する問題