《若依ruoyi》第四十四章:若依日志管理拆解

若依系统有两个日志记录,一个是操作日志,另外一个是登录日志,本章节介绍如何记录登录日志和操作日志

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低代码开发平台

请关注我,本星球会持续推出更多的开源项目代码解析,如有更好的意见请留言回复或者私信。

来源: 互联网
本文观点不代表源码解析立场,不承担法律责任,文章及观点也不构成任何投资意见。

赞 ()

相关推荐

发表回复

评论列表

点击查看更多

    联系我们

    在线咨询: QQ交谈

    微信:13450247865

    邮件:451255340#qq.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    微信