From 28428f90eee52d939f4ab1367c3c8636fc65e791 Mon Sep 17 00:00:00 2001 From: zer0Black <694429613@qq.com> Date: Sat, 19 Mar 2022 15:00:07 +0800 Subject: [PATCH] =?UTF-8?q?redis=E9=85=8D=E7=BD=AE=E6=8C=AA=E7=A7=BB?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=AD=89bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jero/common/api/vo/Result.java | 11 ++- .../com/jero/common/aspect/DictAspect.java | 36 +++++-- .../common/system/query/QueryGenerator.java | 17 +++- .../com/jero/common/util/CommonUtils.java | 7 +- .../java/com/jero/common/util/MinioUtil.java | 7 +- .../com/jero/common/util/oss/OssBootUtil.java | 4 +- .../com/jero/config/shiro/ShiroConfig.java | 17 +++- .../modules/redis/client/JeroRedisClient.java | 14 +-- .../modules/redis/config}/RedisConfig.java | 89 ++++++++++++++---- .../redis/config/RedisConfiguration.java | 93 ------------------- .../redis/prop/JeroRedisProperties.java | 24 ----- .../{service => receiver}/RedisReceiver.java | 5 +- .../JeroRedisCacheWriter.java | 20 ++-- 13 files changed, 163 insertions(+), 181 deletions(-) rename jero-boot/jero-boot-base/{jero-boot-base-core/src/main/java/com/jero/config/redis => jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config}/RedisConfig.java (51%) delete mode 100644 jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfiguration.java delete mode 100644 jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/prop/JeroRedisProperties.java rename jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/{service => receiver}/RedisReceiver.java (91%) rename jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/{write => writer}/JeroRedisCacheWriter.java (99%) diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java index 2bb004d0..9355f227 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java @@ -111,7 +111,16 @@ public class Result implements Serializable { r.setResult(data); return r; } - + + public static Result error(String msg, T data) { + Result r = new Result(); + r.setSuccess(false); + r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500); + r.setMessage(msg); + r.setResult(data); + return r; + } + public static Result error(String msg) { return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java index 3ef2049d..0b6079b7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java @@ -17,6 +17,7 @@ import com.jero.common.constant.CommonConstant; import com.jero.modules.base.service.BaseCommonService; import com.jero.common.util.oConvertUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import java.lang.reflect.Field; @@ -38,6 +39,8 @@ public class DictAspect { @Autowired private CommonAPI commonAPI; + @Autowired + public RedisTemplate redisTemplate; // 定义切点Pointcut @Pointcut("execution(public * com.jero.modules..*.*Controller.*(..))") @@ -133,9 +136,9 @@ public class DictAspect { * @return */ private String translateDictValue(String code, String text, String table, String key) { - if(oConvertUtils.isEmpty(key)) { - return null; - } + if(oConvertUtils.isEmpty(key)) { + return null; + } StringBuffer textValue=new StringBuffer(); String[] keys = key.split(","); for (String k : keys) { @@ -144,12 +147,33 @@ public class DictAspect { if (k.trim().length() == 0) { continue; //跳过循环 } + //update-begin--Author:scott -- Date:20210531 ----for: !56 优化微服务应用下存在表字段需要字典翻译时加载缓慢问题----- if (!StringUtils.isEmpty(table)){ - log.debug("--DictAspect------dicTable="+ table+" ,dicText= "+text+" ,dicCode="+code); - tmpValue= commonAPI.translateDictFromTable(table,text,code,k.trim()); + log.info("--DictAspect------dicTable="+ table+" ,dicText= "+text+" ,dicCode="+code); + String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s,%s,%s]",table,text,code,k.trim()); + if (redisTemplate.hasKey(keyString)){ + try { + tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); + } catch (Exception e) { + log.warn(e.getMessage()); + } + }else { + tmpValue= commonAPI.translateDictFromTable(table,text,code,k.trim()); + } }else { - tmpValue = commonAPI.translateDict(code, k.trim()); + String keyString = String.format("sys:cache:dict::%s:%s",code,k.trim()); + if (redisTemplate.hasKey(keyString)){ + try { + tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); + } catch (Exception e) { + log.warn(e.getMessage()); + } + }else { + tmpValue = commonAPI.translateDict(code, k.trim()); + } } + //update-end--Author:scott -- Date:20210531 ----for: !56 优化微服务应用下存在表字段需要字典翻译时加载缓慢问题----- + if (tmpValue != null) { if (!"".equals(textValue.toString())) { textValue.append(","); diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java index b7db1ece..78f5d43f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java @@ -221,20 +221,31 @@ public class QueryGenerator { if(parameterMap!=null&& parameterMap.containsKey(ORDER_TYPE)) { order = parameterMap.get(ORDER_TYPE)[0]; } - log.debug("排序规则>>列:"+column+",排序方式:"+order); + log.info("排序规则>>列:" + column + ",排序方式:" + order); if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { //字典字段,去掉字典翻译文本后缀 if(column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX)); } //SQL注入check - SqlInjectionUtil.filterContent(column); - + SqlInjectionUtil.filterContent(column); + + //update-begin--Author:scott Date:20210531 for:36 多条件排序无效问题修正------- + // 排序规则修改 + // 将现有排序 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1,column2 desc" + // 修改为 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1 desc,column2 desc" if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) { queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + String columnStr = oConvertUtils.camelToUnderline(column); + String[] columnArray = columnStr.split(","); + queryWrapper.orderByAsc(columnArray); } else { queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + String columnStr = oConvertUtils.camelToUnderline(column); + String[] columnArray = columnStr.split(","); + queryWrapper.orderByDesc(columnArray); } + //update-end--Author:scott Date:20210531 for:36 多条件排序无效问题修正------- } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java index b1a075f9..05c6e199 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java @@ -79,7 +79,8 @@ public class CommonUtils { fileName = fileName.substring(pos + 1); } //替换上传文件名字的特殊字符 - fileName = fileName.replace("=","").replace(",","").replace("&","").replace("#", ""); + fileName = fileName.replace("=","").replace(",","").replace("&","") + .replace("#", "").replace("“", "").replace("”", ""); //替换上传文件名字中的空格 fileName=fileName.replaceAll("\\s",""); return fileName; @@ -142,7 +143,7 @@ public class CommonUtils { String orgName = mf.getOriginalFilename();// 获取文件名 orgName = CommonUtils.getFileName(orgName); if(orgName.indexOf(".")!=-1){ - fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf(".")); + fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); }else{ fileName = orgName+ "_" + System.currentTimeMillis(); } @@ -175,7 +176,7 @@ public class CommonUtils { return getDatabaseTypeByDataSource(dataSource); } catch (SQLException e) { //e.printStackTrace(); - log.warn(e.getMessage()); + log.warn(e.getMessage(), e); return ""; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java index a6413bdd..080344f7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java @@ -76,8 +76,11 @@ public class MinioUtil { orgName=file.getName(); } orgName = CommonUtils.getFileName(orgName); - String objectName = bizPath+"/"+orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); - + String objectName = bizPath+"/" + +( orgName.indexOf(".")==-1 + ?orgName + "_" + System.currentTimeMillis() + :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")) + ); // 使用putObject上传一个本地文件到存储桶中。 if(objectName.startsWith("/")){ objectName = objectName.substring(1); diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java index 71acff12..174835b1 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java @@ -111,7 +111,9 @@ public class OssBootUtil { orgName=file.getName(); } orgName = CommonUtils.getFileName(orgName); - String fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); + String fileName = orgName.indexOf(".")==-1 + ?orgName + "_" + System.currentTimeMillis() + :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); if (!fileDir.endsWith("/")) { fileDir = fileDir.concat("/"); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java index fba24876..80e9be79 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java @@ -1,6 +1,7 @@ package com.jero.config.shiro; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; import org.apache.shiro.mgt.DefaultSubjectDAO; import org.apache.shiro.mgt.SecurityManager; @@ -128,7 +129,6 @@ public class ShiroConfig { filterChainDefinitionMap.put("/websocket/**", "anon");//系统通知和公告 filterChainDefinitionMap.put("/newsWebsocket/**", "anon");//CMS模块 filterChainDefinitionMap.put("/vxeSocket/**", "anon");//JVxeTable无痕刷新示例 - filterChainDefinitionMap.put("/eoaSocket/**","anon");//我的聊天 //性能监控 TODO 存在安全漏洞泄露TOEKN(durid连接池也有) filterChainDefinitionMap.put("/actuator/**", "anon"); @@ -238,12 +238,21 @@ public class ShiroConfig { } manager = redisManager; }else{ - // redis 集群支持,优先使用集群配置 + // redis集群支持,优先使用集群配置 RedisClusterManager redisManager = new RedisClusterManager(); Set portSet = new HashSet<>(); lettuceConnectionFactory.getClusterConfiguration().getClusterNodes().forEach(node -> portSet.add(new HostAndPort(node.getHost() , node.getPort()))); - JedisCluster jedisCluster = new JedisCluster(portSet); - redisManager.setJedisCluster(jedisCluster); + //update-begin--Author:scott Date:20210531 for:修改集群模式下未设置redis密码的bug issues/I3QNIC + if (oConvertUtils.isNotEmpty(lettuceConnectionFactory.getPassword())) { + JedisCluster jedisCluster = new JedisCluster(portSet, 2000, 2000, 5, + lettuceConnectionFactory.getPassword(), new GenericObjectPoolConfig()); + redisManager.setPassword(lettuceConnectionFactory.getPassword()); + redisManager.setJedisCluster(jedisCluster); + } else { + JedisCluster jedisCluster = new JedisCluster(portSet); + redisManager.setJedisCluster(jedisCluster); + } + //update-end--Author:scott Date:20210531 for:修改集群模式下未设置redis密码的bug issues/I3QNIC manager = redisManager; } return manager; diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/client/JeroRedisClient.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/client/JeroRedisClient.java index 47ebced2..6643e18d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/client/JeroRedisClient.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/client/JeroRedisClient.java @@ -6,7 +6,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; import javax.annotation.Resource; -import java.util.Map; /** * redis客户端 @@ -14,7 +13,7 @@ import java.util.Map; @Configuration public class JeroRedisClient { - @Resource(name = "starterRedisTemplate") + @Resource private RedisTemplate redisTemplate; @@ -30,15 +29,4 @@ public class JeroRedisClient { } - /** - * 根据key查询缓存 - * - * @param key 键 - * @return 值 - */ - public T get(String key) { - return key == null ? null : (T) redisTemplate.opsForValue().get(key); - } - - } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/redis/RedisConfig.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfig.java similarity index 51% rename from jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/redis/RedisConfig.java rename to jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfig.java index 0a189bff..4a08911b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/redis/RedisConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfig.java @@ -1,4 +1,4 @@ -package com.jero.config.redis; +package com.jero.common.modules.redis.config; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.PropertyAccessor; @@ -6,6 +6,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; import lombok.extern.slf4j.Slf4j; import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.GlobalConstants; +import com.jero.common.modules.redis.receiver.RedisReceiver; +import com.jero.common.modules.redis.writer.JeroRedisCacheWriter; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; @@ -14,9 +17,16 @@ import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.cache.RedisCacheWriter; +import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.serializer.*; +import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import javax.annotation.Resource; import java.time.Duration; @@ -25,7 +35,8 @@ import static java.util.Collections.singletonMap; /** * 开启缓存支持 -* @Return: +* @author zyf + * @Return: */ @Slf4j @EnableCaching @@ -57,27 +68,25 @@ public class RedisConfig extends CachingConfigurerSupport { /** * RedisTemplate配置 - * * @param lettuceConnectionFactory * @return */ @Bean public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { log.info(" --- redis config init --- "); - // 设置序列化 - Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); - ObjectMapper om = new ObjectMapper(); - om.setVisibility(PropertyAccessor.ALL, Visibility.ANY); - om.enableDefaultTyping(DefaultTyping.NON_FINAL); - jackson2JsonRedisSerializer.setObjectMapper(om); - // 配置redisTemplate + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = jacksonSerializer(); RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(lettuceConnectionFactory); - RedisSerializer stringSerializer = new StringRedisSerializer(); - redisTemplate.setKeySerializer(stringSerializer);// key序列化 - redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// value序列化 - redisTemplate.setHashKeySerializer(stringSerializer);// Hash key序列化 - redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化 + RedisSerializer stringSerializer = new StringRedisSerializer(); + + // key序列化 + redisTemplate.setKeySerializer(stringSerializer); + // value序列化 + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); + // Hash key序列化 + redisTemplate.setHashKeySerializer(stringSerializer); + // Hash value序列化 + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } @@ -90,23 +99,63 @@ public class RedisConfig extends CachingConfigurerSupport { */ @Bean public CacheManager cacheManager(LettuceConnectionFactory factory) { - // 配置序列化(缓存默认有效期 6小时) + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = jacksonSerializer(); + // 配置序列化(解决乱码的问题),并且配置缓存默认有效期 6小时 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(6)); RedisCacheConfiguration redisCacheConfiguration = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) - .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)); + //.disableCachingNullValues(); // 以锁写入的方式创建RedisCacheWriter对象 - //RedisCacheWriter writer = RedisCacheWriter.lockingRedisCacheWriter(factory); + //update-begin-author:taoyan date:20210316 for:注解CacheEvict根据key删除redis支持通配符* + RedisCacheWriter writer = new JeroRedisCacheWriter(factory, Duration.ofMillis(50L)); + //RedisCacheWriter.lockingRedisCacheWriter(factory); // 创建默认缓存配置对象 /* 默认配置,设置缓存有效期 1小时*/ //RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1)); /* 自定义配置test:demo 的超时时间为 5分钟*/ - RedisCacheManager cacheManager = RedisCacheManager.builder(RedisCacheWriter.lockingRedisCacheWriter(factory)).cacheDefaults(redisCacheConfiguration) + RedisCacheManager cacheManager = RedisCacheManager.builder(writer).cacheDefaults(redisCacheConfiguration) + .withInitialCacheConfigurations(singletonMap(CacheConstant.SYS_DICT_TABLE_CACHE, + RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(10)).disableCachingNullValues() + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)))) .withInitialCacheConfigurations(singletonMap(CacheConstant.TEST_DEMO_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(5)).disableCachingNullValues())) .withInitialCacheConfigurations(singletonMap(CacheConstant.PLUGIN_MALL_RANKING, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(24)).disableCachingNullValues())) .withInitialCacheConfigurations(singletonMap(CacheConstant.PLUGIN_MALL_PAGE_LIST, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(24)).disableCachingNullValues())) .transactionAware().build(); + //update-end-author:taoyan date:20210316 for:注解CacheEvict根据key删除redis支持通配符* return cacheManager; } + /** + * redis 监听配置 + * + * @param redisConnectionFactory redis 配置 + * @return + */ + @Bean + public RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory, RedisReceiver redisReceiver, MessageListenerAdapter commonListenerAdapter) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(redisConnectionFactory); + container.addMessageListener(commonListenerAdapter, new ChannelTopic(GlobalConstants.REDIS_TOPIC_NAME)); + return container; + } + + + @Bean + MessageListenerAdapter commonListenerAdapter(RedisReceiver redisReceiver) { + MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(redisReceiver, "onMessage"); + messageListenerAdapter.setSerializer(jacksonSerializer()); + return messageListenerAdapter; + } + + private Jackson2JsonRedisSerializer jacksonSerializer() { + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, Visibility.ANY); + objectMapper.enableDefaultTyping(DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(objectMapper); + return jackson2JsonRedisSerializer; + } + + } diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfiguration.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfiguration.java deleted file mode 100644 index efb16895..00000000 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfiguration.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.jero.common.modules.redis.config; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.jero.common.modules.redis.service.RedisReceiver; -import lombok.extern.slf4j.Slf4j; -import com.jero.common.modules.redis.prop.JeroRedisProperties; -import com.jero.common.constant.GlobalConstants; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.listener.ChannelTopic; -import org.springframework.data.redis.listener.RedisMessageListenerContainer; -import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.data.redis.serializer.StringRedisSerializer; - -/** - * redis配置 - * - */ -@Slf4j -@Configuration -@EnableConfigurationProperties(JeroRedisProperties.class) -@ConditionalOnProperty(value = "spring.redis.enabled", havingValue = "true", matchIfMissing = true) -public class RedisConfiguration { - - - /** - * RedisTemplate配置 - * - * @param lettuceConnectionFactory - * @return - */ - @Bean("starterRedisTemplate") - public RedisTemplate starterRedisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { - log.info(" --- redis config init --- "); - // 设置序列化 - Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); - ObjectMapper om = new ObjectMapper(); - om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); - om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); - jackson2JsonRedisSerializer.setObjectMapper(om); - // 配置redisTemplate - RedisTemplate redisTemplate = new RedisTemplate(); - redisTemplate.setConnectionFactory(lettuceConnectionFactory); - RedisSerializer stringSerializer = new StringRedisSerializer(); - redisTemplate.setKeySerializer(stringSerializer);// key序列化 - redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// value序列化 - redisTemplate.setHashKeySerializer(stringSerializer);// Hash key序列化 - redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化 - redisTemplate.afterPropertiesSet(); - return redisTemplate; - } - - /** - * redis 监听配置 - * - * @param redisConnectionFactory redis 配置 - * @return - */ - @Bean - public RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory, RedisReceiver redisReceiver, MessageListenerAdapter commonListenerAdapter) { - RedisMessageListenerContainer container = new RedisMessageListenerContainer(); - container.setConnectionFactory(redisConnectionFactory); - container.addMessageListener(commonListenerAdapter, new ChannelTopic(GlobalConstants.REDIS_TOPIC_NAME)); - return container; - } - - @Bean - MessageListenerAdapter commonListenerAdapter(RedisReceiver redisReceiver) { - MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(redisReceiver, "onMessage"); - messageListenerAdapter.setSerializer(jacksonSerializer()); - return messageListenerAdapter; - } - - private Jackson2JsonRedisSerializer jacksonSerializer() { - Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); - objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); - jackson2JsonRedisSerializer.setObjectMapper(objectMapper); - return jackson2JsonRedisSerializer; - } - - -} diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/prop/JeroRedisProperties.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/prop/JeroRedisProperties.java deleted file mode 100644 index 896c7648..00000000 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/prop/JeroRedisProperties.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.jero.common.modules.redis.prop; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * redis配置 - * - * @author pangu - */ -@Getter -@Setter -@ConfigurationProperties(JeroRedisProperties.PREFIX) -public class JeroRedisProperties { - /** - * 前缀 - */ - public static final String PREFIX = "spring.redis"; - /** - * 是否开启Lettuce - */ - private Boolean enable = true; -} diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/service/RedisReceiver.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/receiver/RedisReceiver.java similarity index 91% rename from jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/service/RedisReceiver.java rename to jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/receiver/RedisReceiver.java index 2ea97f5a..f0824647 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/service/RedisReceiver.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/receiver/RedisReceiver.java @@ -1,4 +1,4 @@ -package com.jero.common.modules.redis.service; +package com.jero.common.modules.redis.receiver; import cn.hutool.core.util.ObjectUtil; @@ -9,6 +9,9 @@ import com.jero.common.constant.GlobalConstants; import com.jero.common.util.SpringContextHolder; import org.springframework.stereotype.Component; +/** + * @author zyf + */ @Component @Data public class RedisReceiver { diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/write/JeroRedisCacheWriter.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/writer/JeroRedisCacheWriter.java similarity index 99% rename from jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/write/JeroRedisCacheWriter.java rename to jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/writer/JeroRedisCacheWriter.java index 775a0e79..9fb81d95 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/write/JeroRedisCacheWriter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/writer/JeroRedisCacheWriter.java @@ -1,13 +1,4 @@ -package com.jero.common.modules.redis.write; - -import java.nio.charset.StandardCharsets; -import java.time.Duration; -import java.util.Collections; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; -import java.util.function.Function; +package com.jero.common.modules.redis.writer; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.PessimisticLockingFailureException; @@ -19,6 +10,15 @@ import org.springframework.data.redis.core.types.Expiration; import org.springframework.lang.Nullable; import org.springframework.util.Assert; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.Collections; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import java.util.function.Function; + /** * 该类参照 DefaultRedisCacheWriter 重写了 remove 方法实现通配符*删除 */