2016-10-07 2 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 

J'ai deux applications typiques Spring Boot qui partagent une instance Redis pour l'état de session. L'erreur ci-dessus se produit immédiatement lors de la tentative de connexion à mon application.Redis Session Redis ne parvient pas à désérialiser avec ClassNotFoundException

Je ne suis pas très sûr de ce qui se passe ici - les deux applications utilisent les mêmes bibliothèques et versions pour les modèles utilisateur applicables et les dépendances Spring. Pour ce que ça vaut CurrentUser s'étend org.springframework.security.core.userdetails.User, qui est lui-même Serializable.

J'ai redémarré mon instance de Redis en pensant que quelque chose devenait funky, mais ce n'était pas le cas. Je montrerais ce que j'ai déjà essayé, mais je m'assure surtout que mes artefacts ont été construits correctement et que j'ai redémarré l'application et les serveurs Redis, avec un peu de jeu autour de Serializable. Pourquoi est-ce que je vois cela?

+0

Tous les membres de CurrentUser sont-ils également sérialisables? – Snickers3192

+0

Quelques questions: La configuration de Redis (plus spécifiquement la partie sérialisation) est-elle la même dans les deux applications? Si j'ai bien compris 'CurrentUser' est situé dans la bibliothèque externe partagée entre les deux applications? Utilisez-vous Boot DevTools? Exemple qui reproduit le problème ou à tout le moins les parties pertinentes de la configuration pour les deux applications serait utile d'avoir. –

+0

Snickers - ouais. Vedran - les informations qui vous seraient utiles? – bvulaj

Répondre

0

L'exception indique 'Ne peut pas désérialiser' Il semble que vous ayez stocké quelque chose dans Redis, qui ne peut plus être désérialisé. Peut-être avez-vous changé le serialVersionUID pendant ce temps?

J'ai vu que vous avez redémarré Redis, mais peut-être que l'entrée est persistante et a survécu au redémarrage?

+0

Je vais donner un chèque. Il est tout à fait possible que AWS Elasticache permette aux données de survivre au redémarrage. L'objet a changé, mais j'espérais que le redémarrage viderait le magasin. – bvulaj

+0

Pas de chance. Re-créé le cluster et le même problème. D'autres pensées? – bvulaj