作业:操作日志-处理流程

简介: 基于AOP切面与自定义@Log注解,实现操作日志自动记录。通过LogAspect拦截标注方法,结合AsyncManager异步任务管理器与ThreadPoolConfig线程池配置,由AsyncFactory生成日志入库任务,实现高效、解耦的日志持久化。

参考流程:
关键的类
com.ruoyi.common.annotation.Log 自定义注解
Java
运行代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.ruoyi.common.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.enums.OperatorType;

/**

  • 自定义操作日志记录注解
  • @author ruoyi
    /
    @Target({ ElementType.PARAMETER, ElementType.METHOD })
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Log
    {
    /**

    • 模块
      */
      public String title() default "";

      /**

    • 功能
      */
      public BusinessType businessType() default BusinessType.OTHER;

      /**

    • 操作人类别
      */
      public OperatorType operatorType() default OperatorType.MANAGE;

      /**

    • 是否保存请求的参数
      */
      public boolean isSaveRequestData() default true;

      /**

    • 是否保存响应的参数
      */
      public boolean isSaveResponseData() default true;

      /**

    • 排除指定的请求参数
      /
      public String[] excludeParamNames() default {};
      }
      用于标注需要记录操作日志的方法或参数。注解包含多个属性,可以设置日志的模块、功能、操作人类别、是否保存请求和响应参数、以及排除指定的请求参数等。注解可以在方法或参数上使用,并且在运行时可以被读取和解析,以便根据注解的信息记录相应操作日志。
      Java
      运行代码
      复制代码
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      /*
  • 修改通知公告
    */
    @PreAuthorize("@ss.hasPermi('system:notice:edit')")
    @Log(title = "通知公告", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysNotice notice)
    {
    notice.setUpdateBy(getUsername());
    return toAjax(noticeService.updateNotice(notice));
    }
    com.ruoyi.framework.aspectj.LogAspect 在一个aop切面类
    通过实现AOP切面编程,对目标方法进行拦截(标注Log注解的方法),实现了操作日志的自动记录
    com.ruoyi.framework.manager.AsyncManager 异步任务管理器
    提供了执行延迟任务和关闭任务线程池的功能
    com.ruoyi.framework.config.ThreadPoolConfig 初始化线程池,交给spring容器管理
    com.ruoyi.framework.manager.factory.AsyncFactory 异步工厂,产生任务(记录日志到数据库)
    整体实现思路
相关文章
|
数据采集 Python
使用多线程或异步技术提高图片抓取效率
图片抓取是爬虫技术中常见的需求,但是图片抓取的效率受到很多因素的影响,比如网速、网站反爬机制、图片数量和大小等。本文将介绍如何使用多线程或异步技术来提高图片抓取的效率,以及如何使用爬虫代理IP来避免被网站拒绝服务
443 0
使用多线程或异步技术提高图片抓取效率
|
2月前
|
存储 JSON 安全
10-云文档环境搭建
本方案基于Docker部署NextCloud与OnlyOffice,实现私有云文档存储与在线协同编辑。通过NextCloud管理文件,集成OnlyOffice实现多人实时编辑Word、Excel等文档,支持权限控制与文件分享,构建安全高效的办公环境。
|
4月前
|
监控 算法 测试技术
大模型推理服务优化:动态批处理与连续批处理技术
本文系统阐述大语言模型推理服务中的关键技术——动态批处理与连续批处理。通过分析传统静态批处理的局限性,深入解析动态批处理的请求调度算法、内存管理策略,以及连续批处理的中断恢复机制。文章包含完整的服务架构设计、核心算法实现和性能基准测试,为构建高性能大模型推理服务提供全面解决方案。
590 3
|
2月前
|
存储 人工智能 JSON
🤖 Agent系统
大模型Agent是具备自主规划、推理决策、工具调用与记忆能力的智能体,核心由大脑(LLM)、感知、行动与记忆组件构成,支持任务分解、反思优化与多轮交互。常见框架如LangChain、AutoGPT、CrewAI等,广泛应用于复杂任务处理与企业级AI系统。(238字)
|
9月前
|
数据采集 监控 安全
数据治理起步难?Dataphin内置模板来帮你
数据治理冷启动常因沟通协调多、流程长且配置繁琐而受阻。Dataphin 提供多种内置模板,涵盖数据标准码表(如行政区划、度量单位等)、安全分类分级(如金融、能源行业规范)、数据质量规则(40+常用规则)及识别特征(如手机号、身份证号),助力企业快速构建治理框架,提升效率,加速数据战略实施。
300 0
|
2月前
|
Linux Go 虚拟化
01-Docker概述
Docker是基于Go语言的开源容器化平台,实现“一次镜像,处处运行”。它通过镜像、容器、仓库三大核心组件,将应用及其环境打包隔离,直接利用宿主机内核,无需虚拟化硬件,启动快、资源占用少,支持高密度部署,显著提升开发、测试与生产环境的一致性与效率。
|
2月前
|
jenkins Java 持续交付
02-Jenkins配置编译项目
Jenkins配置编译任务,实现从GitLab拉取代码,通过Maven/Node编译打包,Docker构建镜像并推送到CCE仓库,kubectl更新服务。支持后台app-web、system-server及前端Vue项目自动化构建。结合86与164服务器特性,完成镜像导出tar包,实现跨版本兼容。
|
2月前
|
JSON 前端开发 JavaScript
ajax和网络
Ajax(异步JavaScript与XML)是一种利用已有技术组合实现异步通信的技术,通过XMLHttpRequest对象实现页面局部刷新,提升用户体验。它支持GET/POST请求,解决跨域常用JSONP或CORS,具有高效、按需加载的优点,但存在对搜索引擎不友好、安全机制暴露等缺点。同步阻塞等待,异步非阻塞回调,现代开发多用封装库如jQuery。跨域限制源于同源策略(协议、域名、端口一致),可通过动态script、代理等方式突破。HTTP状态码如200成功、404未找到、500服务器错误等,是通信关键标识。
|
9月前
|
存储 人工智能 移动开发
uni-app+vue3接入deepseek-v3搭建跨端ai流式(小程序+app+h5)
基于Uniapp+Vue3+Markdown接入DeepSeek-V3聊天大模型,支持编译到H5+小程序+App端。实现流式输出、支持亮色/暗黑主题、代码高亮、会话本地存储等功能。
1732 13