若依系统有两个日志记录,一个是操作日志,另外一个是登录日志,本章节介绍如何记录登录日志和操作日志
1、日志界面
2、数据库表模型
3、日志表增删改查代码封装
1)、如上述两张表对应mybatis的增删改查代码,代码放在ruoyi-system模块,下面介绍具体包位置
package com.ruoyi.system.domain该包是实体对象,跟数据库的字段一对一映射package com.ruoyi.system.mapper; 该包是操作sql执行映射,除了mybatis封装的操作函数,也可以通过映射xml的id,自定义执行sql其中xml存放在resources目录下。例如SysLogininforMapper.xmlpackage com.ruoyi.system.service.impl; 服务层封装,对上传提供业务逻辑处理。多个sql操作等封装
4、通过“退出”插入用户日志为例子,拆解实现代码
4.1代码实现
代码路径如下:
package com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl
/** * 退出处理 * * @return */ @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException{ LoginUser loginUser = tokenService.getLoginUser(request); if (StringUtils.isNotNull(loginUser)) { String userName = loginUser.getUsername(); // 删除用户缓存记录 tokenService.delLoginUser(loginUser.getToken()); // 记录用户退出日志 AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功")); } ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success("退出成功"))); }
如上述代码业务逻辑说明:
1、删除缓存记录,
2、异步执行日志插入,具体执行代码是AsyncManager.me().execute(
AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功"));
其中AsyncManager实现了ScheduledExecutorService定时程序,初始化如下
/** * 异步操作任务调度线程池 */ private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
4.3 、异步执行封装拆解
如下类是AsyncManager
public class AsyncManager{ /** * 操作延迟10毫秒 */ private final int OPERATE_DELAY_TIME = 10; /** * 异步操作任务调度线程池 */ private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService"); /** * 单例模式 */ private AsyncManager(){} private static AsyncManager me = new AsyncManager(); public static AsyncManager me() { return me; } /** * 执行任务 * * @param task 任务 */ public void execute(TimerTask task) { executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); } /** * 停止任务线程池 */ public void shutdown() { Threads.shutdownAndAwaitTermination(executor); } }
AsyncManager实现的功能:
1、executor初始化对象,SpringUtils.getBean("scheduledExecutorService");
2、调用me()函数返回一个执行器实列。
3、调用execute函数,实现异步执行,其中TimerTask 是执行的函数
4.4、日志执行函数
上述意见介绍异步实现方式,现在调用异步执行需要传入执行函数,如下是用户日志执行函数。
具体实现类在ruoyi-framework模块下面的manager目录下面的AsyncFactory类,是一个异步工厂(产生任务用)实现一步执行插入登录日志表,和操作日志表
具体的类
package com.ruoyi.framework.manager.factory;
5、未来计划
1、ruoyi非分离版本拆解
2、ruoyi-vue-pro:讲解工作流
3、ruoyi-vue-pro:支付模块,电商模块
4、基于ruoyi-vue-pro项目开发
5、JEECG低代码开发平台
请关注我,本星球会持续推出更多的开源项目代码解析,如有更好的意见请留言回复或者私信。
来源:
互联网
本文观点不代表源码解析立场,不承担法律责任,文章及观点也不构成任何投资意见。
评论列表