Home > Back-end >  Spring Redis ClassCastException in the Cache
Spring Redis ClassCastException in the Cache

Time:10-04

Java. Lang. ClassCastException: class Java. Util. LinkedHashMap always be cast to the class custom class name (Java. Util. LinkedHashMap is the module in Java. The base of loader 'bootstrap'; Custom class name is unnamed in the module of loader org. Apache. Catalina. Loader. ParallelWebappClassLoader @ 714 e861f)

Environment:
The JDK 11.0.2
Tomcat 9 +
Redis
Spring framwork 5.2.8. RELEASE
Spring data redis 2.3.3. RELEASE
Jackson 2.10.3
The configuration class code
 

//springcache for redis
@ Bean
Public JedisConnectionFactory redisConnectionFactory (Environment env) {
String redisHost=env. GetProperty (" cache. Redis. Host ");
Int redisPort=Commons. StringToInteger (() - & gt; Env. GetProperty (" cache. Redis. Port "), 6379);
String redisPassword=env. GetProperty (" cache. Redis. Password ");
Int redisDatabase=Commons. StringToInteger (() - & gt; Env. GetProperty (cache. Redis. "database"), 0);
Long redisTimeout=Commons. StringToLong (() - & gt; Env. GetProperty (cache. Redis. "timeout"), 60 l);
RedisStandaloneConfiguration redisConfig=new RedisStandaloneConfiguration (redisHost redisPort);
RedisConfig. SetPassword (redisPassword);
RedisConfig. SetDatabase (redisDatabase);
//the pool
JedisPoolConfig JedisPoolConfig=new JedisPoolConfig ();
JedisPoolConfig. SetMaxIdle (100);
JedisPoolConfig. SetMinIdle (10);
JedisPoolConfig. SetMaxTotal (1000);
JedisPoolConfig. SetMaxWaitMillis (1000 l);

JedisClientConfiguration clientConfig=JedisClientConfiguration. Builder ()
ConnectTimeout (Duration. OfSeconds (redisTimeout))
ReadTimeout (Duration. OfSeconds (redisTimeout))
UsePooling ()
. PoolConfig (jedisPoolConfig)
The build ();
Return new JedisConnectionFactory (redisConfig clientConfig);
}

@ Bean
Public RedisTemplate RedisTemplate (RedisConnectionFactory cf, GenericJackson2JsonRedisSerializer valuesRedisSerializer) {
RedisTemplate RedisTemplate=new RedisTemplate<> (a);
RedisTemplate. SetConnectionFactory (cf);
RedisTemplate. SetKeySerializer (new StringRedisSerializer ());
RedisTemplate. SetValueSerializer (valuesRedisSerializer);//new GenericJackson2JsonRedisSerializer ());
RedisTemplate. SetHashKeySerializer (new StringRedisSerializer ());
RedisTemplate. SetHashValueSerializer (valuesRedisSerializer);//new GenericJackson2JsonRedisSerializer ());
Return redisTemplate;
}
@ Bean
Public RedisCacheManager cacheManager (RedisConnectionFactory connectionFactory, GenericJackson2JsonRedisSerializer valuesRedisSerializer) {
RedisCacheConfiguration config=RedisCacheConfiguration
DefaultCacheConfig ()
EntryTtl (Duration. OfDays (1))
DisableCachingNullValues ()
SerializeValuesWith (RedisSerializationContext. SerializationPair. FromSerializer (valuesRedisSerializer));
Return RedisCacheManager. Builder (connectionFactory). CacheDefaults (config). The build ();
}

@ Bean (" valuesRedisSerializer ")
Public GenericJackson2JsonRedisSerializer redisSerializer () {
JavaTimeModule JTM=new JavaTimeModule ();
JTM. AddSerializer (LocalDateTime. Class, new LocalDateTimeSerializer (DateTimeFormatter. OfPattern (" MM - dd yyyy - HH: MM: ss ")));
JTM. AddSerializer (LocalDate. Class, new LocalDateSerializer (DateTimeFormatter. OfPattern (" yyyy - MM - dd ")));
JTM. AddSerializer (LocalTime. Class, new LocalTimeSerializer (DateTimeFormatter. OfPattern (" HH: mm: ss ")));
JTM. AddDeserializer (LocalDateTime. Class, new LocalDateTimeDeserializer (DateTimeFormatter. OfPattern (" MM - dd yyyy - HH: MM: ss ")));
JTM. AddDeserializer (LocalDate. Class, new LocalDateDeserializer (DateTimeFormatter. OfPattern (" yyyy - MM - dd ")));
JTM. AddDeserializer (LocalTime. Class, new LocalTimeDeserializer (DateTimeFormatter. OfPattern (" HH: mm: ss ")));
ObjectMapper mapper=new ObjectMapper ()
SetVisibility (PropertyAccessor. ALL, JsonAutoDetect. Visibility. ANY)
. RegisterModule (JTM)
RegisterModule (new Jdk8Module ())
FindAndRegisterModules ()
Disable (SerializationFeature. WRITE_DATES_AS_TIMESTAMPS);
GenericJackson2JsonRedisSerializer j2jrs=new GenericJackson2JsonRedisSerializer (mapper);
Return j2jrs;
}


Cache annotation method
 
# @ Cacheable (key="id", unless="# result==null")
@ Override
Public Optional Get (int id) {
If (id & gt; 0 {
Return boardGroupDao. FindOne (id);
}
Return Optional. Empty ();
}


In Redis already has records, personal guess is that during deserialization went wrong?

CodePudding user response:

Eclipse with its own compiler, not the JDK compiler, and other using JDK compiler management program (such as: maven) generated object code are different, not common in the serialization/deserialization
  • Related