若依注解学习(一)@Log

news/2024/11/29 8:47:29/

@Log

        涉及到:
            Log,LogAspect,SecurityUtils,SysUser,SysOperLog,BusinessStatus,StringUtils,ServletUtils
            AsyncManager,AsyncFactory,AddressUtils,IpUtils,RuoYiConfig,HttpUtils,JSONObject,
            ISysOperLogService

            security当前用户,获取ip,获取请求信息,注解参数解析,异步处理,任务工厂,统一异常处理

        位置:
            在我们使用ruoyi的代码生成器的时候,在controller的每个方法出现


        作用:
            写在方法上,通过aop切面编程,在方法执行前、方法执行完、方法异常的时候做处理
            包括对用户的每一次操作进行数据库存储,记录用户操作

        Log定义位置:
            common中,出现在公共模块,若出现在其他模块,极其容易出现模块相互依赖的问

            题,所以ruoyi框架为什么要定义在这


        aop处理:
            core中,core是ruoyi框架的核心代码,在aop中对操作进行处理,其中,会调用安全框架来

            获取当前用户存到SysUser中
            注意这个对象也写在common,也是避免模块依赖问题

            其中的shiroUtils我改成了SecurityUtils,具体逻辑就是从security安全上下文取出当前用

            户,若出现异常则捕获,抛出
            CustomException异常,这个异常继承了RuntimeException,会被若以的全局异常处理

         (@RestControllerAdvice)
            
            接着设置数据库日志对象,保存数据库:
                SysOperLog:
                    设置操作为成功
                    ip:可以直接从security安全上下文获取
                    url:RequestContextHolder获取    getRequestAttributes 再获取    getRequest  再获取      getRequestURI
                    设置用户信息
                    抛出异常则把操作设置为失败    
                    设置方法名,请求方式,根据Log上的参数设置信息
                    异步处理器执行任务保存数据库:
                        调用service,mapper保存
                    
            注意:若以框架有专门的异步处理器AsyncManager
                    通过AsyncManager.me().execute(AsyncFactory.recordOper(operLog));异步处理

            其中AsyncManager中:
                    异步线程池通过springUtils获取: * spring工具类 方便在非spring管理环境中获取bean,  SpringUtils.getBean("scheduledExecutorService");
                    单例
                    execute:参数为一个Task,该Task通过任务工厂AsyncFactory生产你要执行的任务·
                    


http://www.ppmy.cn/news/1121331.html

相关文章

时间轮算法

思考 假如现在有个任务需要3s后执行,你会如何实现? 线程实现:让线程休眠3s 如果存在大量任务时,每个任务都需要一个单独的线程,那这个方案的消耗是极其巨大的,那么如何实现高效的调度呢? 时…

多线程-定时器、线程池

阻塞队列介绍标准库阻塞队列使用基于阻塞队列的简单生产者消费者模型。实现一个简单型阻塞队列 (基于数组实现) 定时器标准库的使用 线程池使用线程数目确定 阻塞队列介绍 不要和之前学多线程的就绪队列搞混; 阻塞队列:也是一个…

springcloud3 分布式事务解决方案seata之AT模式5

一 seata的AT模式 1.1 AT模式与XA模式 XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。 XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。 XA模式强一致;AT模式最终一致 1.2 …

vue3 父子组件传值

一&#xff0c;子传父 父组件 <script setup> import HelloWorld from ./components/HelloWorld.vue import { ref } from vue//直接赋值页面不会自动渲染&#xff0c;使用ref存储响应式数据 import { defineExpose } from "vue";父传子 let val ref(); con…

@Api注解

Api 是一个常用的注解&#xff0c;用于在 Java 代码中标记和描述 RESTful API 接口。 Api 注解通常与其他注解&#xff08;如 RestController、RequestMapping 等&#xff09;一起使用&#xff0c;用于提供 API 的元数据和文档信息。它可以用于类级别和方法级别。 在类级别上…

OpenAI官方吴达恩《ChatGPT Prompt Engineering 提示词工程师》(3)摘要

摘要/ Summarizing 如何使用大模型来概括文本 环境准备 和&#xff08;①指南&#xff09;一样需要搭建一个环境 导入OpenAI、加载API密钥以及这个getCompletion辅助函数 import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv(…

【C语言】指针的进阶(四)—— 企业笔试题解析

笔试题1&#xff1a; int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } 【答案】在x86环境下运行 【解析】 &a是取出整个数组的地址&#xff0c;&a就表示整个数组&#xff0c;因此…

基于微信小程序的小区服务管理系统设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…