From a7158c994f697d52e5c7bd6004880aad560d47f1 Mon Sep 17 00:00:00 2001 From: zhaowenyuan Date: Thu, 6 Jun 2024 14:39:14 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E6=94=B9=20=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=8E=A7=E5=88=B6,=20=E9=80=9A=E8=BF=87redis=20=E5=81=9A?= =?UTF-8?q?=E9=98=9F=E5=88=97=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/log/aspect/SysLogAspect.java | 14 ++-- .../LogConstant.java} | 5 +- .../system/component/LogRedisComponent.java | 83 +++++++++++++++++++ .../system/controller/DictTypeController.java | 1 - .../system/controller/SysLogController.java | 2 +- .../chushang/system}/mapper/SysLogMapper.java | 4 +- .../system}/service/SysLogService.java | 4 +- .../service/impl/SysLogServiceImpl.java | 16 +++- 8 files changed, 113 insertions(+), 16 deletions(-) rename chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/{constant/LogApplicationName.java => constants/LogConstant.java} (64%) create mode 100644 chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/component/LogRedisComponent.java rename {chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/entity => chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system}/mapper/SysLogMapper.java (85%) rename {chushang-common/chushang-common-log/src/main/java/com/chushang/common/log => chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system}/service/SysLogService.java (96%) rename {chushang-common/chushang-common-log/src/main/java/com/chushang/common/log => chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system}/service/impl/SysLogServiceImpl.java (50%) diff --git a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/aspect/SysLogAspect.java b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/aspect/SysLogAspect.java index d1d2ee8..13aa22f 100644 --- a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/aspect/SysLogAspect.java +++ b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/aspect/SysLogAspect.java @@ -18,10 +18,10 @@ import com.chushang.common.core.jackson.JacksonUtils; import com.chushang.common.core.util.IPUtils; import com.chushang.common.core.util.ServletUtils; import com.chushang.common.log.annotation.SysLog; +import com.chushang.common.log.constants.LogConstant; import com.chushang.common.log.entity.SysLogEntity; import com.chushang.common.log.enums.BusinessType; import com.chushang.common.log.enums.LogTypeEnum; -import com.chushang.common.log.service.SysLogService; import com.chushang.security.utils.SecurityUtils; import com.chushang.security.entity.vo.LoginUser; import lombok.RequiredArgsConstructor; @@ -32,11 +32,11 @@ import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; +import org.redisson.api.RList; +import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; @@ -44,7 +44,6 @@ import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; -import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; @@ -59,7 +58,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor(onConstructor_ = @Autowired) public class SysLogAspect { - final SysLogService sysLogService; + final RedissonClient redissonClient; @Pointcut("@annotation(com.chushang.common.log.annotation.SysLog)") public void logPointCut() { @@ -171,7 +170,10 @@ public class SysLogAspect { sysLogEntity.setException(ex); assert syslog != null; if (syslog.isDatabase()){ - sysLogService.save(sysLogEntity); + // 入队列, 方便在system 统一查询 + RList list = redissonClient.getList(LogConstant.QUEUE_NAME); + list.add(sysLogEntity); +// sysLogService.save(sysLogEntity); }else { log.info("log {}", JSONObject.toJSONString(sysLogEntity)); } diff --git a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/constant/LogApplicationName.java b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/constants/LogConstant.java similarity index 64% rename from chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/constant/LogApplicationName.java rename to chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/constants/LogConstant.java index 45abde1..7de5e3d 100644 --- a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/constant/LogApplicationName.java +++ b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/constants/LogConstant.java @@ -1,6 +1,6 @@ -package com.chushang.common.log.constant; +package com.chushang.common.log.constants; -public interface LogApplicationName { +public interface LogConstant { /** * 系统 @@ -15,4 +15,5 @@ public interface LogApplicationName { */ String TASK = "task-service"; + String QUEUE_NAME = "OPERATION_LOG"; } diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/component/LogRedisComponent.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/component/LogRedisComponent.java new file mode 100644 index 0000000..6718c21 --- /dev/null +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/component/LogRedisComponent.java @@ -0,0 +1,83 @@ +package com.chushang.system.component; + +import com.chushang.common.log.constants.LogConstant; +import com.chushang.common.log.entity.SysLogEntity; +import com.chushang.system.service.SysLogService; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RQueue; +import org.redisson.api.RedissonClient; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.List; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @auther: zhao + * @date: 2024/4/12 17:09 + */ +@Slf4j +@Component +public class LogRedisComponent { + + private final SysLogService logService; + private final RedissonClient redissonClient; + public LogRedisComponent(SysLogService logService, RedissonClient redissonClient){ + log.info("构造器执行"); + this.logService = logService; + this.redissonClient = redissonClient; + } + private final ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1); + @PostConstruct + public void redisStart() { + log.info("线程执行"); + Thread startLogQueueThread = startLogQueueThread(); + scheduledThreadPoolExecutor.scheduleWithFixedDelay(()->{ + Thread runLog = startLogQueueThread; + try { + boolean runLogThreadAlive = runLog.isAlive(); + if (!runLogThreadAlive) { + throw new NullPointerException("runLogThread alive false"); + } + } catch (Exception ex) { + System.out.println("logQueueThread 重启线程"); + runLog = startLogQueueThread(); + } + }, 10 ,30, TimeUnit.SECONDS); + log.info("RedisLogQueueCollect is starting!"); + } + + private Thread startLogQueueThread() { + Thread logQueueThread = new Thread(this::logQueueThread); + logQueueThread.start(); + return logQueueThread; + } + + private void logQueueThread() + { + while (true) { + if (log.isDebugEnabled()){ + log.debug("读取redis 数据"); + } + try { + try { + // 每1000 毫秒从 redis 获取一遍 入队数据 + Thread.sleep(1000); + } catch (InterruptedException e) { + log.error("", e); + Thread.currentThread().interrupt(); + } + if (!redissonClient.isShutdown()){ + RQueue list = redissonClient.getQueue(LogConstant.QUEUE_NAME); + List reqList = list.poll(5000); + logService.saveBatch(reqList); + }else { + if (log.isDebugEnabled()) log.debug(" Redisson is shutdown"); + } + } catch (RuntimeException e) { + log.error("logQueueThread error, 并重启线程!", e); + } + } + } +} diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictTypeController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictTypeController.java index 7a0c78c..c6a976f 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictTypeController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictTypeController.java @@ -4,7 +4,6 @@ import com.chushang.common.core.exception.utils.AssertUtil; import com.chushang.common.core.web.AjaxResult; import com.chushang.common.excel.utils.ExcelUtils; import com.chushang.common.log.annotation.SysLog; -import com.chushang.common.log.constant.LogApplicationName; import com.chushang.common.log.enums.BusinessType; import com.chushang.common.mybatis.page.CommonParam; import com.chushang.common.mybatis.utils.PageResult; diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysLogController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysLogController.java index 3fcdaf8..f9f4852 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysLogController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysLogController.java @@ -12,7 +12,7 @@ import com.chushang.common.core.web.AjaxResult; import com.chushang.common.log.annotation.SysLog; import com.chushang.common.log.entity.dto.ListLogDTO; import com.chushang.common.log.enums.BusinessType; -import com.chushang.common.log.service.SysLogService; +import com.chushang.system.service.SysLogService; import com.chushang.common.mybatis.utils.PageResult; import com.chushang.security.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; diff --git a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/entity/mapper/SysLogMapper.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/mapper/SysLogMapper.java similarity index 85% rename from chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/entity/mapper/SysLogMapper.java rename to chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/mapper/SysLogMapper.java index b7d8cda..a448d96 100644 --- a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/entity/mapper/SysLogMapper.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/mapper/SysLogMapper.java @@ -1,4 +1,4 @@ -package com.chushang.common.log.entity.mapper; +package com.chushang.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.chushang.common.log.entity.SysLogEntity; @@ -9,4 +9,4 @@ public interface SysLogMapper extends BaseMapper { @Delete("TRUNCATE TABLE sys_log") void cleanLog(); -} \ No newline at end of file +} diff --git a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/service/SysLogService.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/SysLogService.java similarity index 96% rename from chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/service/SysLogService.java rename to chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/SysLogService.java index 41fc341..5f56f6f 100644 --- a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/service/SysLogService.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/SysLogService.java @@ -1,4 +1,4 @@ -package com.chushang.common.log.service; +package com.chushang.system.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -10,8 +10,10 @@ import com.chushang.common.log.entity.dto.ListLogDTO; import com.chushang.common.log.enums.LogTypeEnum; import com.chushang.common.mybatis.utils.PageResult; import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RQueue; import java.util.Arrays; +import java.util.List; /** * by zhaowenyuan create 2022/3/16 15:35 diff --git a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/service/impl/SysLogServiceImpl.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysLogServiceImpl.java similarity index 50% rename from chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/service/impl/SysLogServiceImpl.java rename to chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysLogServiceImpl.java index 542a6b4..ddfcccc 100644 --- a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/service/impl/SysLogServiceImpl.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysLogServiceImpl.java @@ -1,11 +1,18 @@ -package com.chushang.common.log.service.impl; +package com.chushang.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.chushang.common.log.constants.LogConstant; import com.chushang.common.log.entity.SysLogEntity; -import com.chushang.common.log.entity.mapper.SysLogMapper; -import com.chushang.common.log.service.SysLogService; +import com.chushang.system.mapper.SysLogMapper; +import com.chushang.system.service.SysLogService; import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RQueue; +import org.redisson.api.RedissonClient; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; /** * by zhaowenyuan create 2022/3/16 15:35 @@ -13,8 +20,11 @@ import org.springframework.stereotype.Service; @Slf4j @Service public class SysLogServiceImpl extends ServiceImpl implements SysLogService { + @Resource + RedissonClient redissonClient; @Override public void cleanLog() { baseMapper.cleanLog(); } + }