java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class 自定義類全名 (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; 自定義類全名 is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @714e861f)
環境:
JDK 11.0.2
Tomcat 9+
Redis
Spring framwork 5.2.8.RELEASE
Spring data redis 2.3.3.RELEASE
jackson 2.10.3
配置類代碼
//springcache for redis
@Bean
public JedisConnectionFactory redisConnectionFactory(Environment env) {
String redisHost = env.getProperty("cache.redis.host");
int redisPort = Commons.stringToInteger(()->env.getProperty("cache.redis.port"), 6379);
String redisPassword = env.getProperty("cache.redis.password");
int redisDatabase = Commons.stringToInteger(()->env.getProperty("cache.redis.database"), 0);
long redisTimeout = Commons.stringToLong(()->env.getProperty("cache.redis.timeout"), 60L);
RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration(redisHost, redisPort);
redisConfig.setPassword(redisPassword);
redisConfig.setDatabase(redisDatabase);
//pool
JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(100);
jedisPoolConfig.setMinIdle(10);
jedisPoolConfig.setMaxTotal(1000);
jedisPoolConfig.setMaxWaitMillis(1000L);
JedisClientConfiguration clientConfig = JedisClientConfiguration.builder()
.connectTimeout(Duration.ofSeconds(redisTimeout))
.readTimeout(Duration.ofSeconds(redisTimeout))
.usePooling()
.poolConfig(jedisPoolConfig)
.build();
return new JedisConnectionFactory(redisConfig, clientConfig);
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory cf, GenericJackson2JsonRedisSerializer valuesRedisSerializer) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
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).build();
}
@Bean("valuesRedisSerializer")
public GenericJackson2JsonRedisSerializer redisSerializer(){
JavaTimeModule jtm = new JavaTimeModule();
jtm.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd 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("yyyy-MM-dd 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;
}
快取注解的方法
@Cacheable(key = "#id", unless="#result==null")
@Override
public Optional<BoardGroup> get(int id) {
if (id > 0) {
return boardGroupDao.findOne(id);
}
return Optional.empty();
}
Redis中已經有記錄了。個人猜想是不是在反序列化時出錯了?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/24562.html
標籤:Web 開發
上一篇:大神們,幫幫我,看看這道題目吧
下一篇:如何同時使用兩個資料源?
