RedisConfig.java 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package org.jeecg.config;
  2. import java.lang.reflect.Method;
  3. import javax.annotation.Resource;
  4. import org.springframework.cache.annotation.CachingConfigurerSupport;
  5. import org.springframework.cache.annotation.EnableCaching;
  6. import org.springframework.cache.interceptor.KeyGenerator;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
  10. import org.springframework.data.redis.core.RedisTemplate;
  11. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  12. import org.springframework.data.redis.serializer.RedisSerializer;
  13. import org.springframework.data.redis.serializer.StringRedisSerializer;
  14. import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
  15. import com.fasterxml.jackson.annotation.PropertyAccessor;
  16. import com.fasterxml.jackson.databind.ObjectMapper;
  17. import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
  18. @Configuration
  19. @EnableCaching // 开启缓存支持
  20. public class RedisConfig extends CachingConfigurerSupport {
  21. @Resource
  22. private LettuceConnectionFactory lettuceConnectionFactory;
  23. /**
  24. * @description 自定义的缓存key的生成策略 若想使用这个key
  25. * 只需要讲注解上keyGenerator的值设置为keyGenerator即可</br>
  26. * @return 自定义策略生成的key
  27. */
  28. @Bean
  29. public KeyGenerator keyGenerator() {
  30. return new KeyGenerator() {
  31. @Override
  32. public Object generate(Object target, Method method, Object... params) {
  33. StringBuffer sb = new StringBuffer();
  34. sb.append(target.getClass().getName());
  35. sb.append(method.getName());
  36. for (Object obj : params) {
  37. sb.append(obj.toString());
  38. }
  39. return sb.toString();
  40. }
  41. };
  42. }
  43. // 这个注释不能放开,发现自定义缓存管理器,会导致实体解析失败
  44. //TODO
  45. // @Bean
  46. // public CacheManager cacheManager() {
  47. // RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(lettuceConnectionFactory);
  48. // return builder.build();
  49. // }
  50. /**
  51. * RedisTemplate配置
  52. */
  53. @Bean
  54. public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
  55. // 设置序列化
  56. Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
  57. ObjectMapper om = new ObjectMapper();
  58. om.setVisibility(PropertyAccessor.ALL, Visibility.ANY);
  59. om.enableDefaultTyping(DefaultTyping.NON_FINAL);
  60. jackson2JsonRedisSerializer.setObjectMapper(om);
  61. // 配置redisTemplate
  62. RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
  63. redisTemplate.setConnectionFactory(lettuceConnectionFactory);
  64. RedisSerializer<?> stringSerializer = new StringRedisSerializer();
  65. redisTemplate.setKeySerializer(stringSerializer);// key序列化
  66. redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// value序列化
  67. redisTemplate.setHashKeySerializer(stringSerializer);// Hash key序列化
  68. redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化
  69. redisTemplate.afterPropertiesSet();
  70. return redisTemplate;
  71. }
  72. }