日志记录功能
需求描述:
1,可记录页面操作模块、按钮的日志记录
2,记录详细的指定操作数据日志
3,记录的数据可能需要查询表
4,需要考虑到扩展性及个性化定制
表结构设计:
CREATE TABLE YES_DEV.T_COMM_OPERATION_LOG (ID BINARY_BIGINT NOT NULL,OPERATOR VARCHAR(128),OPERATION_MODULE VARCHAR(64),OPERATION_OBJECT VARCHAR(128),OPERATION_TYPE VARCHAR(32),OPERATION_CONTENT CLOB,OPERATION_RESULT VARCHAR(8),OPERATION_IP VARCHAR(32),OPERATION_TIME TIMESTAMP,STATUS CHAR,CDATETIME TIMESTAMP,UDATETIME TIMESTAMP,CONSTRAINT T_COMM_OPERATION_LOG_PK PRIMARY KEY (ID)
);
自定义 controller/service层方法注解
import com.taia.yms.auditlog.aop.inter.OperationLogRuleInterface;
import com.taia.yms.auditlog.aop.service.DefaultOperationLogRule;
import java.lang.annotation.*;/*** 操作日志自定义注解* controller-> mapper1,mapper2.....*/@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface OperationLog {/*** controller层* @return 操作的页面名称*/String pageName() default "";/*** 主要是 mapper 执行的类型* 如果有值,则直接取注解上的值;如果没有,则按照自定义规则得到该值* @return*/String type() default "";/*** 执行的规则实现类的方法* @return*/String method() default "parse";/*** 规则实现类* @return*/Class<? extends OperationLogRuleInterface> operation() default DefaultOperationLogRule.class;}
import org.springframework.stereotype.Component;
import java.util.Map;/*** 规则接口*/
@Component
public interface OperationLogRuleInterface {void parse(Map<Integer,Object> map);}
import cn.hutool.json.JSONUtil;
import com.taia.yms.auditlog.aop.inter.OperationLogRuleInterface;
import com.taia.yms.auditlog.aop.model.OperationLogModel;
import com.taia.yms.auditlog.entity.OperationLog;
import com.taia.yms.config.ThreadLocalConf;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;@Slf4j
public class DefaultOperationLogRule implements OperationLogRuleInterface {@Overridepublic void parse(Map<Integer,Object> map) {log.info("parse map:{}",map);//controller后置处理 默认将所有的contentMap转化为JSON串输出,如果需要自定义,重新定义规则类OperationLogModel operationLogModel = (OperationLogModel)ThreadLocalConf.getValue(OperationLogModel.class.getName());OperationLog operationLog = operationLogModel.getOperationLog();Map<String, Object> contentMap = operationLogModel.getOperationContentMap();operationLog.setOperationContent(JSONUtil.toJsonStr(contentMap));}
}
核心对象设计
import com.taia.yms.auditlog.entity.OperationLog;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;@Data
@Slf4j
public class OperationLogModel {private OperationLog operationLog;/*** 记录对应的mapper实例*/private Map<String,Object> beanMapperMap = new HashMap<>(5);/*** 存储所有 mapper层的字段数据*/private Map<String,Object> operationContentMap = new HashMap<>(10);/*** 新增 Operation* @return*/public OperationLog getOperationLog(){if(operationLog == null){operationLog = new OperationLog();}return operationLog;}}
实体对象OperationLog
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.sql.Timestamp;
import java.util.List;@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class OperationLog {private String operationContent;private Timestamp operationTime;private String operator;private String operationModule = "DataGovernanceServer";private String operationObject;private String operationType;private String operationResult = "1";private String operationIp;// 前后比较的对象,默认是比较一层,多层需要重写private Object oldObject;private Object newObject;private Object insertJson;private List<List<LogCo相关文章:
日志记录功能
需求描述: 1,可记录页面操作模块、按钮的日志记录 2,记录详细的指定操作数据日志 3,记录的数据可能需要查询表 4,需要考虑到扩展性及个性化定制 表结构设计: CREATE TABLE YES_DEV.T_COMM_OPERATION_LOG (ID BINARY_BIGINT NOT NULL,OPERATOR VARCHAR(128),OPERATION_MO…...
Android中的多线程与线程池详解
Android中的多线程与线程池详解 一、技术难点 在Android开发中,多线程和线程池是处理复杂任务、提高应用性能和响应性的关键技术。然而,这些技术也带来了一些技术难点。 1. 多线程技术难点 线程同步:多线程环境下,数据访问的同…...
使用LangChain+Ollama自己做的一个和大语言模型聊天的网站支持上下文对话,学习记录。
0.引言 在自己学习的过程中可以自己做一个和聊天大模型对话的一个小网站,成就感不亚于人生第一次跑完10km。 1.项目介绍 前端代码:Vue3, MarkDownIT. 后端代码:Python3, Fernet库, OpenAPI, LangChain, Ollama. Ollama 本地模型的部署和管理…...
excel数据透视
Excel中,数据透视图(PivotChart)和数据透视表(PivotTable)是两个紧密相关的工具,用于分析数据。数据透视表是数据透视图的数据源,也就是说,数据透视图是基于数据透视表中的数据创建的…...
七、(正点原子)Linux并发与竞争
Linux是多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。 一、并发与竞争 1、简介 并发就是多个…...
vue2+TS,el-table表格单选的写法
1.打开表格 //父组件引入 <customerChoose ref"customerChooseRef" onSure"setOrderInfoFn"></customerChoose>//子传父,接收值,操作private async setOrderInfoFn(data) {this.form.customerId data.idthis.form.cu…...
北邮《计算机网络》蒋老师思考题及答案-传输层
蒋yj老师yyds! 答案自制,仅供参考,欢迎质疑讨论 问题一览 传输层思考题P2P和E2E的区别使用socket的c/s模式通信,流控如何反映到编程模型三次握手解决什么问题举一个两次握手失败的例子为什么链路层是两次握手而非三次?…...
学懂C#编程:常用高级技术【元组的详细使用】——利用元组获取多个返回值
C#常用高级技术——利用元组获取多个返回值 在C# 7.0及更高版本中,您可以使用元组(Tuples)来实现这种返回多个值的方法。您提供的代码片段是正确的,它定义了一个名为Calculate的方法,该方法接受两个整数参数a和b&#…...
解决IDEA使用卡顿的问题,设置JVM内存大小和清理缓存
解决IntelliJ IDEA中卡顿问题,可以尝试以下几个常见且有效的步骤: 1 增加IDEA的JVM内存分配: 位于IDEA安装目录的bin文件夹下,找到对应的操作系统配置文件(idea64.exe.vmoptions(Windows)或id…...
Python爬虫从入门到入狱之爬取知乎用户信息
items中的代码主要是我们要爬取的字段的定义 class UserItem(scrapy.Item):id \ Field()name \ Field()account\_status \ Field()allow\_message\ Field()answer\_count \ Field()articles\_count \ Field()avatar\_hue \ Field()avatar\_url \ Field()avatar\_url\_template…...
apk反编译修改教程系列-----去除apk软件更新方法步骤列举 记录八种最常见的去除方法
在前面几期博文中 有说明去除apk软件更新的步骤方法。我们在对应软件反编译去除更新中要灵活运用。区别对待。同一个软件可以有不同的去除更新方法可以适用。今天的教程对于软件更新去除列举几种经常使用的修改步骤。 通过基础课程可以了解 1-----软件反编译更新去除的几种常…...
SpringMVC系列六: 视图和视图解析器
视图和视图解析器 💞基本介绍💞 自定义视图为什么需要自定义视图自定义试图实例-代码实现自定义视图工作流程小结Debug源码默认视图解析器执行流程多个视图解析器执行流程 💞目标方法直接指定转发或重定向使用实例指定请求转发流程-Debug源码…...
MySQL数据备份的分类
MySQL数据库的备份 在我们使用MySQL数据库的过程中,一些意外情况的发生,有可能造成数据的损失。例如,意外的停电,不小心的操作失误等都可能造成数据的丢失。 所以为了保证数据的安全与一致性,需要定期对数据进行备份。…...
node+nginx实现对react进行一键打包部署--windows版
文章目录 nodenginx实现对react进行一键打包部署--windows版1.功能展示及项目准备1.1功能展示 1.2 项目准备1.2.1技术点1.2.2安装相关配置(windows) 2.实现2.1 实现思路2.2 实现步骤2.1 项目准备2.1.1 创建env文件2.1.2 创建api/index.js文件2.1.3 添加解决跨域代码 2.2 项目实…...
【机器学习】基于Gumbel-Sinkhorn网络的“潜在排列问题”求解
1. 引言 1.1.“潜在排列”问题 本文将深入探索一种特殊的神经网络方法,该方法在处理离散对象时展现出卓越的能力,尤其是针对潜在排列问题的解决方案。在现代机器学习和深度学习的领域中,处理离散数据一直是一个挑战,因为传统的神经网络架构通常是为连续数据设计的。然而,…...
create-react-app创建的项目中设置webpack配置
create-react-app 创建的项目默认使用的是 react-scripts(存在于node_modules文件夹中)来处理开发服务器和构建,它内置了一些webpack相关配置。一般不会暴露出来给开发者,但是在有些情况下我们需要修改下webpack默认配置ÿ…...
【ai】tx2 nx :安装torch、torchvision for yolov5
torchvision 是自己本地构建的验证torchvision nvidia@tx2-nx:~/twork/03_yolov5/torchvision$ nvidia@tx2-nx:~/twork/03_yolov5/torchvision$ python3 Python 3.6.9 (default, Mar 10 2023, 16:46:00) [GCC 8.4.0] on linux Type "help", "copyright",…...
【报错】在终端中输入repo命令后系统未能识别这个命令
1 报错 已经使用curl命令来下载repo工具,但是在终端中输入repo命令后系统未能识别这个命令。 2 分析 通常是因为repo...
【机器学习】K-Means算法详解:从原理到实践
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 K-Means算法详解:从原理到实践引言1. 基本原理1.1 簇与距离度量1.2 …...
解决qiankun项目与子应用样式混乱问题
背景 qiankun项目用的是Vue2Antdesign2,但其中一个子应用用的是Vue3Antdesign4。集成之后发现子应用的样式混乱,渲染的是Antdesign2的样式。 解决 以下步骤在子应用里操作 1. 在main.js引入ConfigProvider ,在app全局注册ConfigProvider …...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
