RedisConfig.java 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.jtzx.crm.config;
  2. import com.fasterxml.jackson.annotation.JsonTypeInfo;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.fasterxml.jackson.databind.SerializationFeature;
  5. import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.ComponentScan;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.context.annotation.Primary;
  10. import org.springframework.data.redis.connection.RedisConnectionFactory;
  11. import org.springframework.data.redis.core.RedisTemplate;
  12. import org.springframework.data.redis.core.StringRedisTemplate;
  13. import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
  14. import org.springframework.data.redis.serializer.StringRedisSerializer;
  15. @Configuration
  16. public class RedisConfig {
  17. @Bean
  18. @Primary // 加上 Primary 确保绝对优先
  19. @SuppressWarnings("all") // 压制泛型警告
  20. public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { // <-- 移除这里的 <String, Object> 泛型
  21. RedisTemplate<String, Object> template = new RedisTemplate<>();
  22. template.setConnectionFactory(connectionFactory);
  23. // 使用安全的序列化器
  24. ObjectMapper objectMapper = new ObjectMapper();
  25. objectMapper.registerModule(new JavaTimeModule());
  26. objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),
  27. ObjectMapper.DefaultTyping.NON_FINAL,
  28. JsonTypeInfo.As.PROPERTY);
  29. objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  30. GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer(objectMapper);
  31. // Key 使用字符串序列化器
  32. template.setKeySerializer(new StringRedisSerializer());
  33. template.setValueSerializer(serializer);
  34. template.setHashKeySerializer(new StringRedisSerializer());
  35. template.setHashValueSerializer(serializer);
  36. // Stream 相关序列化器
  37. template.setStringSerializer(new StringRedisSerializer());
  38. template.afterPropertiesSet();
  39. return template; // <-- 返回带有一切配置的原始 RedisTemplate Bean
  40. }
  41. @Bean
  42. @Primary // 加上 Primary 确保绝对优先
  43. @SuppressWarnings("all") // 压制泛型警告
  44. public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory connectionFactory) {
  45. return new StringRedisTemplate(connectionFactory);
  46. }
  47. }