From 5963acb664c97e11bb448921ebac509c4240e261 Mon Sep 17 00:00:00 2001 From: Jie Zheng <201507802@qq.com> Date: Wed, 15 Jan 2025 16:36:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96Redis=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E9=85=8D=E7=BD=AE=EF=BC=8C=E9=9B=86=E6=88=90Redisson?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=BC=BA=E6=97=A5=E5=BF=97=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...disConfig.java => RedisConfiguration.java} | 163 +++++++----------- .../config/RedissonConfiguration.java | 68 ++++++++ .../config/webConfig/SwaggerConfig.java | 80 ++++----- .../config/webConfig/SwaggerDataConfig.java | 52 ++++++ .../system/service/impl/DataServiceImpl.java | 2 +- .../system/service/impl/DeptServiceImpl.java | 2 +- .../service/impl/DictDetailServiceImpl.java | 2 +- .../system/service/impl/DictServiceImpl.java | 2 +- .../system/service/impl/JobServiceImpl.java | 2 +- .../system/service/impl/MenuServiceImpl.java | 2 +- .../system/service/impl/RoleServiceImpl.java | 2 +- .../system/service/impl/UserServiceImpl.java | 2 +- .../main/resources/config/application-dev.yml | 2 +- .../resources/config/application-prod.yml | 2 +- .../src/main/resources/config/application.yml | 11 ++ eladmin-system/src/main/resources/logback.xml | 7 + .../service/impl/AliPayServiceImpl.java | 2 +- .../service/impl/EmailServiceImpl.java | 2 +- .../service/impl/QiNiuServiceImpl.java | 2 +- pom.xml | 7 + 20 files changed, 265 insertions(+), 149 deletions(-) rename eladmin-common/src/main/java/me/zhengjie/config/{RedisConfig.java => RedisConfiguration.java} (62%) create mode 100644 eladmin-common/src/main/java/me/zhengjie/config/RedissonConfiguration.java create mode 100644 eladmin-common/src/main/java/me/zhengjie/config/webConfig/SwaggerDataConfig.java diff --git a/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java b/eladmin-common/src/main/java/me/zhengjie/config/RedisConfiguration.java similarity index 62% rename from eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java rename to eladmin-common/src/main/java/me/zhengjie/config/RedisConfiguration.java index d36a0be7..63998e61 100644 --- a/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java +++ b/eladmin-common/src/main/java/me/zhengjie/config/RedisConfiguration.java @@ -15,47 +15,39 @@ */ package me.zhengjie.config; -import cn.hutool.core.lang.Assert; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.ParserConfig; import com.alibaba.fastjson.serializer.SerializerFeature; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.data.redis.RedisProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cache.Cache; -import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.CacheErrorHandler; import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.cache.interceptor.SimpleCacheErrorHandler; import org.springframework.context.annotation.Bean; 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.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.RedisOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.RedisSerializer; -import reactor.util.annotation.Nullable; -import java.nio.charset.Charset; +import org.springframework.data.redis.serializer.StringRedisSerializer; + import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.HashMap; import java.util.Map; - /** * @author Zheng Jie - * @date 2018-11-24 + * @date 2025-01-13 */ @Slf4j @Configuration @EnableCaching -@ConditionalOnClass(RedisOperations.class) -@EnableConfigurationProperties(RedisProperties.class) -public class RedisConfig extends CachingConfigurerSupport { +public class RedisConfiguration { /** * 设置 redis 数据默认过期时间,默认2小时 @@ -70,9 +62,7 @@ public class RedisConfig extends CachingConfigurerSupport { return configuration; } - @SuppressWarnings("all") @Bean(name = "redisTemplate") - @ConditionalOnMissingBean(name = "redisTemplate") public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate template = new RedisTemplate<>(); //序列化 @@ -92,6 +82,8 @@ public class RedisConfig extends CachingConfigurerSupport { ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.quartz.service.dto"); ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.security.service.dto"); ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.system.service.dto"); + // 分页返回数据 + ParserConfig.getGlobalInstance().addAccept("me.zhengjie.utils.PageResult"); // key的序列化采用StringRedisSerializer template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); @@ -100,10 +92,24 @@ public class RedisConfig extends CachingConfigurerSupport { } /** - * 自定义缓存key生成策略,默认将使用该策略 + * 缓存管理器,需要指定使用 + * @param redisConnectionFactory / + * @return 缓存管理器 + */ + @Bean + public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { + RedisCacheConfiguration config = redisCacheConfiguration(); + return RedisCacheManager.builder(redisConnectionFactory) + .cacheDefaults(config) + .build(); + } + + /** + * 自定义缓存key生成策略,需要在缓存注解中使用keyGenerator才会生效 + * 默认是使用SimpleKeyGenerator生成的key + * 继承 CachingConfigurerSupport 后,才会默认生效这个生成器,暂时没找到其他方式默认生效,如果有请PR,谢谢 */ @Bean - @Override public KeyGenerator keyGenerator() { return (target, method, params) -> { Map container = new HashMap<>(8); @@ -126,100 +132,63 @@ public class RedisConfig extends CachingConfigurerSupport { } @Bean - @Override - @SuppressWarnings({"all"}) + @SuppressWarnings("all") public CacheErrorHandler errorHandler() { - // 异常处理,当Redis发生异常时,打印日志,但是程序正常走 - log.info("初始化 -> [{}]", "Redis CacheErrorHandler"); - return new CacheErrorHandler() { + return new SimpleCacheErrorHandler() { @Override - public void handleCacheGetError(RuntimeException e, Cache cache, Object key) { - log.error("Redis occur handleCacheGetError:key -> [{}]", key, e); + public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) { + // 处理缓存读取错误 + log.error("Cache Get Error: {}",exception.getMessage()); } - @Override - public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) { - log.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e); + public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) { + // 处理缓存写入错误 + log.error("Cache Put Error: {}",exception.getMessage()); } - @Override - public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) { - log.error("Redis occur handleCacheEvictError:key -> [{}]", key, e); + public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) { + // 处理缓存删除错误 + log.error("Cache Evict Error: {}",exception.getMessage()); } - @Override - public void handleCacheClearError(RuntimeException e, Cache cache) { - log.error("Redis occur handleCacheClearError:", e); + public void handleCacheClearError(RuntimeException exception, Cache cache) { + // 处理缓存清除错误 + log.error("Cache Clear Error: {}",exception.getMessage()); } }; } -} -/** - * Value 序列化 - * - * @author / - * @param - */ -class FastJsonRedisSerializer implements RedisSerializer { + /** + * Value 序列化 + * + * @param + * @author / + */ + static class FastJsonRedisSerializer implements RedisSerializer { - private final Class clazz; + private final Class clazz; - FastJsonRedisSerializer(Class clazz) { - super(); - this.clazz = clazz; - } - - @Override - public byte[] serialize(T t) { - if (t == null) { - return new byte[0]; + FastJsonRedisSerializer(Class clazz) { + super(); + this.clazz = clazz; } - return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(StandardCharsets.UTF_8); - } - @Override - public T deserialize(byte[] bytes) { - if (bytes == null || bytes.length == 0) { - return null; + @Override + public byte[] serialize(T t) { + if (t == null) { + return new byte[0]; + } + return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(StandardCharsets.UTF_8); } - String str = new String(bytes, StandardCharsets.UTF_8); - return JSON.parseObject(str, clazz); + + @Override + public T deserialize(byte[] bytes) { + if (bytes == null || bytes.length == 0) { + return null; + } + String str = new String(bytes, StandardCharsets.UTF_8); + return JSON.parseObject(str, clazz); + } + } - -} - -/** - * 重写序列化器 - * - * @author / - */ -class StringRedisSerializer implements RedisSerializer { - - private final Charset charset; - - StringRedisSerializer() { - this(StandardCharsets.UTF_8); - } - - private StringRedisSerializer(Charset charset) { - Assert.notNull(charset, "Charset must not be null!"); - this.charset = charset; - } - - @Override - public String deserialize(byte[] bytes) { - return (bytes == null ? null : new String(bytes, charset)); - } - - @Override - public @Nullable byte[] serialize(Object object) { - String string = JSON.toJSONString(object); - - if (org.apache.commons.lang3.StringUtils.isBlank(string)) { - return null; - } - string = string.replace("\"", ""); - return string.getBytes(charset); - } -} +} \ No newline at end of file diff --git a/eladmin-common/src/main/java/me/zhengjie/config/RedissonConfiguration.java b/eladmin-common/src/main/java/me/zhengjie/config/RedissonConfiguration.java new file mode 100644 index 00000000..8bb63eda --- /dev/null +++ b/eladmin-common/src/main/java/me/zhengjie/config/RedissonConfiguration.java @@ -0,0 +1,68 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package me.zhengjie.config; + +import cn.hutool.core.util.StrUtil; +import lombok.Data; +import org.redisson.Redisson; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +public class RedissonConfiguration { + + @Value("${spring.redis.host}") + private String redisHost; + + @Value("${spring.redis.port}") + private int redisPort; + + @Value("${spring.redis.database}") + private int redisDatabase; + + @Value("${spring.redis.password:}") + private String redisPassword; + + @Value("${spring.redis.timeout:5000}") + private int timeout; + + @Value("${spring.redis.lettuce.pool.max-active:64}") + private int connectionPoolSize; + + @Value("${spring.redis.lettuce.pool.min-idle:16}") + private int connectionMinimumIdleSize; + + @Bean + public RedissonClient redissonClient() { + Config config = new Config(); + config.useSingleServer() + .setAddress("redis://" + redisHost + ":" + redisPort) + .setDatabase(redisDatabase) + .setTimeout(timeout) + .setConnectionPoolSize(connectionPoolSize) + .setConnectionMinimumIdleSize(connectionMinimumIdleSize); + if(StrUtil.isNotBlank(redisPassword)){ + config.useSingleServer().setPassword(redisPassword); + } + return Redisson.create(config); + } +} + + diff --git a/eladmin-common/src/main/java/me/zhengjie/config/webConfig/SwaggerConfig.java b/eladmin-common/src/main/java/me/zhengjie/config/webConfig/SwaggerConfig.java index d7f22261..d921196a 100644 --- a/eladmin-common/src/main/java/me/zhengjie/config/webConfig/SwaggerConfig.java +++ b/eladmin-common/src/main/java/me/zhengjie/config/webConfig/SwaggerConfig.java @@ -15,23 +15,18 @@ */ package me.zhengjie.config.webConfig; -import cn.hutool.core.collection.CollUtil; -import com.fasterxml.classmate.TypeResolver; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; import lombok.RequiredArgsConstructor; import me.zhengjie.utils.AnonTagUtils; +import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; -import org.springframework.data.domain.Pageable; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; -import springfox.documentation.schema.AlternateTypeRule; -import springfox.documentation.schema.AlternateTypeRuleConvention; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.ApiKey; import springfox.documentation.service.AuthorizationScope; @@ -40,15 +35,16 @@ import springfox.documentation.service.SecurityScheme; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; import springfox.documentation.swagger2.annotations.EnableSwagger2; - +import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import static springfox.documentation.schema.AlternateTypeRules.newRule; - /** * api页面 /doc.html * @author Zheng Jie @@ -129,39 +125,45 @@ public class SwaggerConfig { securityReferences.add(new SecurityReference(tokenHeader, authorizationScopes)); return securityReferences; } -} - -/** - * 将Pageable转换展示在swagger中 - */ -@Configuration -class SwaggerDataConfig { + /** + * 解决Springfox与SpringBoot集成后,WebMvcRequestHandlerProvider和WebFluxRequestHandlerProvider冲突问题 + * @return / + */ @Bean - public AlternateTypeRuleConvention pageableConvention(final TypeResolver resolver) { - return new AlternateTypeRuleConvention() { + @SuppressWarnings({"all"}) + public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { + return new BeanPostProcessor() { + @Override - public int getOrder() { - return Ordered.HIGHEST_PRECEDENCE; + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; } - @Override - public List rules() { - return CollUtil.newArrayList(newRule(resolver.resolve(Pageable.class), resolver.resolve(Page.class))); + private void customizeSpringfoxHandlerMappings(List mappings) { + List filteredMappings = mappings.stream() + .filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(filteredMappings); + } + + private List getHandlerMappings(Object bean) { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + if (field != null) { + field.setAccessible(true); + try { + return (List) field.get(bean); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Failed to access handlerMappings field", e); + } + } + return Collections.emptyList(); } }; } - - @ApiModel - @Data - private static class Page { - @ApiModelProperty("页码 (0..N)") - private Integer page; - - @ApiModelProperty("每页显示的数目") - private Integer size; - - @ApiModelProperty("以下列格式排序标准:property[,asc | desc]。 默认排序顺序为升序。 支持多种排序条件:如:id,asc") - private List sort; - } } + diff --git a/eladmin-common/src/main/java/me/zhengjie/config/webConfig/SwaggerDataConfig.java b/eladmin-common/src/main/java/me/zhengjie/config/webConfig/SwaggerDataConfig.java new file mode 100644 index 00000000..2fba8407 --- /dev/null +++ b/eladmin-common/src/main/java/me/zhengjie/config/webConfig/SwaggerDataConfig.java @@ -0,0 +1,52 @@ +package me.zhengjie.config.webConfig; + +import cn.hutool.core.collection.CollUtil; +import com.fasterxml.classmate.TypeResolver; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.data.domain.Pageable; +import springfox.documentation.schema.AlternateTypeRule; +import springfox.documentation.schema.AlternateTypeRuleConvention; + +import java.util.List; + +import static springfox.documentation.schema.AlternateTypeRules.newRule; + +/** + * 将Pageable转换展示在swagger中 + */ +@Configuration +public class SwaggerDataConfig { + + @Bean + public AlternateTypeRuleConvention pageableConvention(final TypeResolver resolver) { + return new AlternateTypeRuleConvention() { + @Override + public int getOrder() { + return Ordered.HIGHEST_PRECEDENCE; + } + + @Override + public List rules() { + return CollUtil.newArrayList(newRule(resolver.resolve(Pageable.class), resolver.resolve(Page.class))); + } + }; + } + + @ApiModel + @Data + private static class Page { + @ApiModelProperty("页码 (0..N)") + private Integer page; + + @ApiModelProperty("每页显示的数目") + private Integer size; + + @ApiModelProperty("以下列格式排序标准:property[,asc | desc]。 默认排序顺序为升序。 支持多种排序条件:如:id,asc") + private List sort; + } +} diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java index 782fbd8f..336a9be0 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java @@ -36,7 +36,7 @@ import java.util.*; **/ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "data") +@CacheConfig(cacheNames = "data", keyGenerator = "keyGenerator") public class DataServiceImpl implements DataService { private final RoleService roleService; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java index a02bd699..89233a2b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java @@ -47,7 +47,7 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "dept") +@CacheConfig(cacheNames = "dept", keyGenerator = "keyGenerator") public class DeptServiceImpl implements DeptService { private final DeptRepository deptRepository; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictDetailServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictDetailServiceImpl.java index 5da4d056..51ef1114 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictDetailServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictDetailServiceImpl.java @@ -40,7 +40,7 @@ import java.util.List; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "dict") +@CacheConfig(cacheNames = "dict", keyGenerator = "keyGenerator") public class DictDetailServiceImpl implements DictDetailService { private final DictRepository dictRepository; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictServiceImpl.java index 68265121..3beb828b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictServiceImpl.java @@ -41,7 +41,7 @@ import java.util.*; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "dict") +@CacheConfig(cacheNames = "dict", keyGenerator = "keyGenerator") public class DictServiceImpl implements DictService { private final DictRepository dictRepository; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java index a608b97a..7c72fe62 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java @@ -44,7 +44,7 @@ import java.util.*; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "job") +@CacheConfig(cacheNames = "job", keyGenerator = "keyGenerator") public class JobServiceImpl implements JobService { private final JobRepository jobRepository; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java index ca8297e7..2ad44d10 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java @@ -50,7 +50,7 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "menu") +@CacheConfig(cacheNames = "menu", keyGenerator = "keyGenerator") public class MenuServiceImpl implements MenuService { private final MenuRepository menuRepository; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java index 9a12c520..a429cc3b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java @@ -52,7 +52,7 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "role") +@CacheConfig(cacheNames = "role", keyGenerator = "keyGenerator") public class RoleServiceImpl implements RoleService { private final RoleRepository roleRepository; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java index 41ae50b7..d8c83177 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java @@ -50,7 +50,7 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "user") +@CacheConfig(cacheNames = "user", keyGenerator = "keyGenerator") public class UserServiceImpl implements UserService { private final UserRepository userRepository; diff --git a/eladmin-system/src/main/resources/config/application-dev.yml b/eladmin-system/src/main/resources/config/application-dev.yml index eee8ddaf..e227c779 100644 --- a/eladmin-system/src/main/resources/config/application-dev.yml +++ b/eladmin-system/src/main/resources/config/application-dev.yml @@ -45,7 +45,7 @@ spring: enabled: true # 记录慢SQL log-slow-sql: true - slow-sql-millis: 1000 + slow-sql-millis: 2000 merge-sql: true wall: config: diff --git a/eladmin-system/src/main/resources/config/application-prod.yml b/eladmin-system/src/main/resources/config/application-prod.yml index 748c0101..77fef99b 100644 --- a/eladmin-system/src/main/resources/config/application-prod.yml +++ b/eladmin-system/src/main/resources/config/application-prod.yml @@ -49,7 +49,7 @@ spring: enabled: true # 记录慢SQL log-slow-sql: true - slow-sql-millis: 1000 + slow-sql-millis: 2000 merge-sql: true wall: config: diff --git a/eladmin-system/src/main/resources/config/application.yml b/eladmin-system/src/main/resources/config/application.yml index 8f9b917f..21487256 100644 --- a/eladmin-system/src/main/resources/config/application.yml +++ b/eladmin-system/src/main/resources/config/application.yml @@ -40,6 +40,17 @@ spring: password: ${REDIS_PWD:} #连接超时时间 timeout: 5000 + # 连接池配置 + lettuce: + pool: + # 连接池最大连接数 + max-active: 30 + # 连接池最大阻塞等待时间(毫秒),负值表示没有限制 + max-wait: -1 + # 连接池中的最大空闲连接数 + max-idle: 20 + # 连接池中的最小空闲连接数 + min-idle: 1 task: pool: diff --git a/eladmin-system/src/main/resources/logback.xml b/eladmin-system/src/main/resources/logback.xml index db910fdd..f991c414 100644 --- a/eladmin-system/src/main/resources/logback.xml +++ b/eladmin-system/src/main/resources/logback.xml @@ -16,4 +16,11 @@ + + + + + + + diff --git a/eladmin-tools/src/main/java/me/zhengjie/service/impl/AliPayServiceImpl.java b/eladmin-tools/src/main/java/me/zhengjie/service/impl/AliPayServiceImpl.java index 0625ba42..c539bec4 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/service/impl/AliPayServiceImpl.java +++ b/eladmin-tools/src/main/java/me/zhengjie/service/impl/AliPayServiceImpl.java @@ -38,7 +38,7 @@ import java.util.Optional; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "aliPay") +@CacheConfig(cacheNames = "aliPay", keyGenerator = "keyGenerator") public class AliPayServiceImpl implements AliPayService { private final AliPayRepository alipayRepository; diff --git a/eladmin-tools/src/main/java/me/zhengjie/service/impl/EmailServiceImpl.java b/eladmin-tools/src/main/java/me/zhengjie/service/impl/EmailServiceImpl.java index aa567327..a2488d05 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/service/impl/EmailServiceImpl.java +++ b/eladmin-tools/src/main/java/me/zhengjie/service/impl/EmailServiceImpl.java @@ -37,7 +37,7 @@ import java.util.Optional; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "email") +@CacheConfig(cacheNames = "email", keyGenerator = "keyGenerator") public class EmailServiceImpl implements EmailService { private final EmailRepository emailRepository; diff --git a/eladmin-tools/src/main/java/me/zhengjie/service/impl/QiNiuServiceImpl.java b/eladmin-tools/src/main/java/me/zhengjie/service/impl/QiNiuServiceImpl.java index 60093d7b..fe622245 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/service/impl/QiNiuServiceImpl.java +++ b/eladmin-tools/src/main/java/me/zhengjie/service/impl/QiNiuServiceImpl.java @@ -51,7 +51,7 @@ import java.util.*; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "qiNiu") +@CacheConfig(cacheNames = "qiNiu", keyGenerator = "keyGenerator") public class QiNiuServiceImpl implements QiNiuService { private final QiNiuConfigRepository qiNiuConfigRepository; diff --git a/pom.xml b/pom.xml index f6ac3402..d59e0f03 100644 --- a/pom.xml +++ b/pom.xml @@ -81,6 +81,13 @@ spring-boot-starter-data-redis + + + org.redisson + redisson-spring-boot-starter + 3.17.1 + +