From 4639d13ba61abfaed3c9d3da0e057892577b5c40 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Thu, 31 Aug 2023 22:05:35 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=AF=B9=E8=8E=B7=E5=8F=96=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.优化 Spring Cache 配置 2.暂时移除 Jackson 针对数值类型:Long、BigInteger、BigDecimal 的 toString 处理(TreeUtil 疑似在字符串类型 parentId 时会出现转换异常) --- .../common/config/RedisConfiguration.java | 102 ++++++++++++++++++ .../common/config/RedissonConfiguration.java | 52 --------- .../config/jackson/JacksonConfiguration.java | 12 +-- .../cnadmin/common/constant/CacheConsts.java | 5 + .../auth/service/impl/LoginServiceImpl.java | 23 ++-- .../cnadmin/system/mapper/MenuMapper.java | 8 +- .../cnadmin/system/service/MenuService.java | 15 ++- .../system/service/impl/MenuServiceImpl.java | 21 +++- .../system/service/impl/RoleServiceImpl.java | 11 +- .../src/main/resources/mapper/MenuMapper.xml | 6 +- .../controller/auth/LoginController.java | 5 +- .../src/main/resources/application-dev.yml | 9 +- .../src/main/resources/application-prod.yml | 9 +- .../src/main/resources/application.yml | 8 -- 14 files changed, 181 insertions(+), 105 deletions(-) create mode 100644 continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/RedisConfiguration.java delete mode 100644 continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/RedissonConfiguration.java diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/RedisConfiguration.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/RedisConfiguration.java new file mode 100644 index 00000000..ee8a9d07 --- /dev/null +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/RedisConfiguration.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * 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 top.charles7c.cnadmin.common.config; + +import java.util.Map; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import org.redisson.codec.JsonJacksonCodec; +import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer; +import org.springframework.boot.autoconfigure.cache.CacheProperties; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.serializer.*; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.databind.ObjectMapper; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; +import cn.hutool.json.JSONUtil; + +/** + * Redis 配置 + * + * @author Charles7c + * @since 2022/12/28 23:17 + */ +@Slf4j +@EnableCaching +@Configuration +@RequiredArgsConstructor +public class RedisConfiguration extends CachingConfigurerSupport { + + private final ObjectMapper objectMapper; + + /** + * Redisson 自定义配置 + */ + @Bean + public RedissonAutoConfigurationCustomizer redissonCustomizer() { + // 解决序列化乱码问题 + return config -> config.setCodec(new JsonJacksonCodec(objectMapper)); + } + + /** + * 解决 Spring Cache(@Cacheable)缓存乱码问题 + */ + @Bean + public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) { + ObjectMapper objectMapperCopy = + objectMapper.copy().enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) + .serializeValuesWith(RedisSerializationContext.SerializationPair + .fromSerializer(new GenericJackson2JsonRedisSerializer(objectMapperCopy))); + CacheProperties.Redis redisCacheProperties = cacheProperties.getRedis(); + if (null != redisCacheProperties.getTimeToLive()) { + redisCacheConfiguration = redisCacheConfiguration.entryTtl(redisCacheProperties.getTimeToLive()); + } + if (!redisCacheProperties.isCacheNullValues()) { + redisCacheConfiguration = redisCacheConfiguration.disableCachingNullValues(); + } + return redisCacheConfiguration; + } + + /** + * 自定义缓存 key 生成策略(如果 @Cacheable 不指定 key,则默认使用该策略) + */ + @Bean + @Override + public KeyGenerator keyGenerator() { + return (target, method, params) -> { + String key = StrUtil.toUnderlineCase(method.getName()).toUpperCase(); + Map paramMap = MapUtil.newHashMap(params.length); + for (int i = 0; i < params.length; i++) { + paramMap.put(String.valueOf(i), params[i]); + } + return String.format("%s:%s", key, DigestUtil.sha256Hex(JSONUtil.toJsonStr(paramMap))); + }; + } +} diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/RedissonConfiguration.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/RedissonConfiguration.java deleted file mode 100644 index 22673273..00000000 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/RedissonConfiguration.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. - * - * 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 top.charles7c.cnadmin.common.config; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import org.redisson.codec.JsonJacksonCodec; -import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * Redisson 配置 - * - * @author Charles7c - * @since 2022/12/28 23:17 - */ -@Slf4j -@EnableCaching -@Configuration -@RequiredArgsConstructor -public class RedissonConfiguration { - - private final ObjectMapper objectMapper; - - /** - * Redisson 自定义配置 - */ - @Bean - public RedissonAutoConfigurationCustomizer redissonCustomizer() { - // 解决序列化乱码问题 - return config -> config.setCodec(new JsonJacksonCodec(objectMapper)); - } -} diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/jackson/JacksonConfiguration.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/jackson/JacksonConfiguration.java index bb72e924..fa2db8dc 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/jackson/JacksonConfiguration.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/jackson/JacksonConfiguration.java @@ -16,8 +16,6 @@ package top.charles7c.cnadmin.common.config.jackson; -import java.math.BigDecimal; -import java.math.BigInteger; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -33,7 +31,6 @@ import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; @@ -57,19 +54,12 @@ public class JacksonConfiguration { /** - * 针对数值类型:Long、BigInteger、BigDecimal,时间类型:LocalDateTime、LocalDate、LocalTime 的序列化和反序列化 + * 针对时间类型:LocalDateTime、LocalDate、LocalTime 的序列化和反序列化 */ @Bean public Jackson2ObjectMapperBuilderCustomizer customizer() { return builder -> { JavaTimeModule javaTimeModule = new JavaTimeModule(); - // 针对数值类型:Long、BigInteger、BigDecimal 的序列化 - javaTimeModule.addSerializer(Long.class, ToStringSerializer.instance); - javaTimeModule.addSerializer(Long.TYPE, ToStringSerializer.instance); - javaTimeModule.addSerializer(BigInteger.class, ToStringSerializer.instance); - javaTimeModule.addSerializer(BigDecimal.class, ToStringSerializer.instance); - - // 针对时间类型:LocalDateTime、LocalDate、LocalTime 的序列化和反序列化 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter)); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter)); diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/CacheConsts.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/CacheConsts.java index 59b8db47..49f3a085 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/CacheConsts.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/constant/CacheConsts.java @@ -47,4 +47,9 @@ public class CacheConsts { * 用户缓存键前缀 */ public static final String USER_KEY_PREFIX = "USER"; + + /** + * 菜单缓存键前缀 + */ + public static final String MENU_KEY_PREFIX = "MENU"; } diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/auth/service/impl/LoginServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/auth/service/impl/LoginServiceImpl.java index c550e086..e7b5b5e4 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/auth/service/impl/LoginServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/auth/service/impl/LoginServiceImpl.java @@ -16,9 +16,8 @@ package top.charles7c.cnadmin.auth.service.impl; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; @@ -44,7 +43,6 @@ import top.charles7c.cnadmin.common.util.helper.LoginHelper; import top.charles7c.cnadmin.common.util.validate.CheckUtils; import top.charles7c.cnadmin.system.model.entity.UserDO; -import top.charles7c.cnadmin.system.model.query.MenuQuery; import top.charles7c.cnadmin.system.model.vo.DeptDetailVO; import top.charles7c.cnadmin.system.model.vo.MenuVO; import top.charles7c.cnadmin.system.service.DeptService; @@ -91,21 +89,20 @@ public String login(String username, String password) { @Override public List buildRouteTree(Long userId) { - Set roleSet = permissionService.listRoleCodeByUserId(userId); - if (CollUtil.isEmpty(roleSet)) { + Set roleCodeSet = permissionService.listRoleCodeByUserId(userId); + if (CollUtil.isEmpty(roleCodeSet)) { return new ArrayList<>(0); } // 查询菜单列表 - List menuList; - if (roleSet.contains(SysConsts.ADMIN_ROLE_CODE)) { - MenuQuery menuQuery = new MenuQuery(); - menuQuery.setStatus(DisEnableStatusEnum.ENABLE.getValue()); - menuList = menuService.list(menuQuery, null); + Set menuSet = new LinkedHashSet<>(); + if (roleCodeSet.contains(SysConsts.ADMIN_ROLE_CODE)) { + menuSet.addAll(menuService.list()); } else { - menuList = menuService.listByUserId(userId); + roleCodeSet.forEach(roleCode -> menuSet.addAll(menuService.listByRoleCode(roleCode))); } - menuList.removeIf(m -> MenuTypeEnum.BUTTON.equals(m.getType())); + List menuList = + menuSet.stream().filter(m -> !MenuTypeEnum.BUTTON.equals(m.getType())).collect(Collectors.toList()); // 构建路由树 TreeField treeField = MenuVO.class.getDeclaredAnnotation(TreeField.class); diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/MenuMapper.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/MenuMapper.java index 7ca6ab9d..af785aec 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/MenuMapper.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/mapper/MenuMapper.java @@ -42,11 +42,11 @@ public interface MenuMapper extends BaseMapper { Set selectPermissionByUserId(@Param("userId") Long userId); /** - * 根据用户 ID 查询 + * 根据角色编码查询 * - * @param userId - * 用户 ID + * @param roleCode + * 角色编码 * @return 菜单列表 */ - List selectListByUserId(@Param("userId") Long userId); + List selectListByRoleCode(@Param("roleCode") String roleCode); } diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/MenuService.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/MenuService.java index e94fe6fc..5c5c920e 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/MenuService.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/MenuService.java @@ -42,11 +42,18 @@ public interface MenuService extends BaseService listPermissionByUserId(Long userId); /** - * 根据用户 ID 查询 + * 根据角色编码查询 + * + * @param roleCode + * 角色编码 + * @return 菜单列表 + */ + List listByRoleCode(String roleCode); + + /** + * 查询所有菜单 * - * @param userId - * 用户 ID * @return 菜单列表 */ - List listByUserId(Long userId); + List list(); } diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/MenuServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/MenuServiceImpl.java index a601c698..76aa5a2a 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/MenuServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/MenuServiceImpl.java @@ -20,12 +20,16 @@ import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import cn.hutool.core.bean.BeanUtil; import top.charles7c.cnadmin.common.base.BaseServiceImpl; +import top.charles7c.cnadmin.common.constant.CacheConsts; import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum; import top.charles7c.cnadmin.common.util.validate.CheckUtils; import top.charles7c.cnadmin.system.mapper.MenuMapper; @@ -43,10 +47,12 @@ */ @Service @RequiredArgsConstructor +@CacheConfig(cacheNames = CacheConsts.MENU_KEY_PREFIX) public class MenuServiceImpl extends BaseServiceImpl implements MenuService { @Override + @CacheEvict(allEntries = true) @Transactional(rollbackFor = Exception.class) public Long add(MenuRequest request) { String title = request.getTitle(); @@ -58,6 +64,7 @@ public Long add(MenuRequest request) { } @Override + @CacheEvict(allEntries = true) @Transactional(rollbackFor = Exception.class) public void update(MenuRequest request, Long id) { String title = request.getTitle(); @@ -68,6 +75,7 @@ public void update(MenuRequest request, Long id) { } @Override + @CacheEvict(allEntries = true) @Transactional(rollbackFor = Exception.class) public void delete(List ids) { baseMapper.lambdaUpdate().in(MenuDO::getParentId, ids).remove(); @@ -80,13 +88,22 @@ public Set listPermissionByUserId(Long userId) { } @Override - public List listByUserId(Long userId) { - List menuList = baseMapper.selectListByUserId(userId); + @Cacheable(key = "#roleCode") + public List listByRoleCode(String roleCode) { + List menuList = baseMapper.selectListByRoleCode(roleCode); List list = BeanUtil.copyToList(menuList, MenuVO.class); list.forEach(this::fill); return list; } + @Override + @Cacheable(key = "'ALL'") + public List list() { + MenuQuery menuQuery = new MenuQuery(); + menuQuery.setStatus(DisEnableStatusEnum.ENABLE.getValue()); + return super.list(menuQuery, null); + } + /** * 检查名称是否存在 * diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java index 48c28f02..3fe6f1ac 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java @@ -21,6 +21,7 @@ import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -30,6 +31,7 @@ import top.charles7c.cnadmin.auth.service.OnlineUserService; import top.charles7c.cnadmin.common.base.BaseServiceImpl; +import top.charles7c.cnadmin.common.constant.CacheConsts; import top.charles7c.cnadmin.common.constant.SysConsts; import top.charles7c.cnadmin.common.enums.DataScopeEnum; import top.charles7c.cnadmin.common.enums.DataTypeEnum; @@ -82,6 +84,7 @@ public Long add(RoleRequest request) { } @Override + @CacheEvict(cacheNames = CacheConsts.MENU_KEY_PREFIX, key = "#request.code == 'admin' ? 'ALL' : #request.code") @Transactional(rollbackFor = Exception.class) public void update(RoleRequest request, Long id) { String name = request.getName(); @@ -167,15 +170,15 @@ public List listNameByIds(List ids) { @Override public Set listCodeByUserId(Long userId) { - List roleIds = userRoleService.listRoleIdByUserId(userId); - List roleList = baseMapper.lambdaQuery().select(RoleDO::getCode).in(RoleDO::getId, roleIds).list(); + List roleIdList = userRoleService.listRoleIdByUserId(userId); + List roleList = baseMapper.lambdaQuery().select(RoleDO::getCode).in(RoleDO::getId, roleIdList).list(); return roleList.stream().map(RoleDO::getCode).collect(Collectors.toSet()); } @Override public Set listByUserId(Long userId) { - List roleIds = userRoleService.listRoleIdByUserId(userId); - List roleList = baseMapper.lambdaQuery().in(RoleDO::getId, roleIds).list(); + List roleIdList = userRoleService.listRoleIdByUserId(userId); + List roleList = baseMapper.lambdaQuery().in(RoleDO::getId, roleIdList).list(); return new HashSet<>(BeanUtil.copyToList(roleList, RoleDTO.class)); } diff --git a/continew-admin-system/src/main/resources/mapper/MenuMapper.xml b/continew-admin-system/src/main/resources/mapper/MenuMapper.xml index 4949d661..43ec6107 100644 --- a/continew-admin-system/src/main/resources/mapper/MenuMapper.xml +++ b/continew-admin-system/src/main/resources/mapper/MenuMapper.xml @@ -14,14 +14,12 @@ AND t3.`status` = 1 - SELECT t1.* FROM `sys_menu` AS t1 LEFT JOIN `sys_role_menu` AS t2 ON t2.`menu_id` = t1.`id` LEFT JOIN `sys_role` AS t3 ON t3.`id` = t2.`role_id` - LEFT JOIN `sys_user_role` AS t4 ON t4.`role_id` = t3.`id` - LEFT JOIN `sys_user` AS t5 ON t5.`id` = t4.`user_id` - WHERE t5.`id` = #{userId} + WHERE t3.`code` = #{roleCode} AND t1.`status` = 1 AND t3.`status` = 1 diff --git a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/auth/LoginController.java b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/auth/LoginController.java index dde4b9e3..f0ee4131 100644 --- a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/auth/LoginController.java +++ b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/webapi/controller/auth/LoginController.java @@ -45,6 +45,7 @@ import top.charles7c.cnadmin.common.util.SecureUtils; import top.charles7c.cnadmin.common.util.helper.LoginHelper; import top.charles7c.cnadmin.common.util.validate.ValidationUtils; +import top.charles7c.cnadmin.monitor.annotation.Log; import top.charles7c.cnadmin.system.model.vo.UserDetailVO; import top.charles7c.cnadmin.system.service.UserService; @@ -92,6 +93,7 @@ public R logout() { return R.ok(); } + @Log(ignore = true) @Operation(summary = "获取用户信息", description = "获取登录用户信息") @GetMapping("/user/info") public R getUserInfo() { @@ -103,9 +105,10 @@ public R getUserInfo() { return R.ok(userInfoVO); } + @Log(ignore = true) @Operation(summary = "获取路由信息", description = "获取登录用户的路由信息") @GetMapping("/route") - public R> listMenu() { + public R> listRoute() { Long userId = LoginHelper.getUserId(); List routeTree = loginService.buildRouteTree(userId); return R.ok(routeTree); diff --git a/continew-admin-webapi/src/main/resources/application-dev.yml b/continew-admin-webapi/src/main/resources/application-dev.yml index 79d545f6..e6e82f00 100644 --- a/continew-admin-webapi/src/main/resources/application-dev.yml +++ b/continew-admin-webapi/src/main/resources/application-dev.yml @@ -50,7 +50,7 @@ spring.liquibase: # 配置文件路径 change-log: classpath:/db/changelog/db.changelog-master.yaml ---- ### Redis 单机配置 +--- ### Redis 配置(单机版) spring: redis: # 地址 @@ -65,6 +65,13 @@ spring: timeout: 10s # 是否开启 SSL ssl: false + ## Spring Cache 配置 + cache: + redis: + # 缓存过期时长(单位:毫秒,默认 -1,表示永不过期) + time-to-live: 7200000 + # 是否允许缓存空值(默认 true,表示允许,可以解决缓存穿透问题) + cache-null-values: true --- ### 邮件配置 spring.mail: diff --git a/continew-admin-webapi/src/main/resources/application-prod.yml b/continew-admin-webapi/src/main/resources/application-prod.yml index 73cd4a89..151ebbc4 100644 --- a/continew-admin-webapi/src/main/resources/application-prod.yml +++ b/continew-admin-webapi/src/main/resources/application-prod.yml @@ -50,7 +50,7 @@ spring.liquibase: # 配置文件路径 change-log: classpath:/db/changelog/db.changelog-master.yaml ---- ### Redis 单机配置 +--- ### Redis 配置(单机版) spring: redis: # 地址 @@ -65,6 +65,13 @@ spring: timeout: 10s # 是否开启 SSL ssl: false + ## Spring Cache 配置 + cache: + redis: + # 缓存过期时长(单位:毫秒,默认 -1,表示永不过期) + time-to-live: 7200000 + # 是否允许缓存空值(默认 true,表示允许,可以解决缓存穿透问题) + cache-null-values: true --- ### 邮件配置 spring.mail: diff --git a/continew-admin-webapi/src/main/resources/application.yml b/continew-admin-webapi/src/main/resources/application.yml index ca278a58..981d58e2 100644 --- a/continew-admin-webapi/src/main/resources/application.yml +++ b/continew-admin-webapi/src/main/resources/application.yml @@ -212,14 +212,6 @@ spring: deserialization: # 允许反序列化不存在的属性 FAIL_ON_UNKNOWN_PROPERTIES: false - ## 缓存配置(@Cacheable) - cache: - type: redis - redis: - # 缓存过期时长(单位:毫秒,默认 -1,表示永不过期) - time-to-live: 7200000 - # 是否允许缓存空值(默认 true,表示允许,可以解决缓存穿透问题) - cache-null-values: true --- ### 健康检查配置 management.health: