单例模式的应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011277745/article/details/80865581
创建一个单例对象
package com.myshiro.support.support.manager;

import java.util.TimerTask;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/* *
 * @Author xuzn
 * @Description 日志操作任务运行管理器 单例
 */
public class LogExeManager {

    private static final int LOG_DELAY_TIME = 10;
    //
    private ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(20);
    // 创建一个私有静态对象
    private static LogExeManager logExeManager = new LogExeManager();
    // 定义一个无参数的构造函数
    private LogExeManager() {

    }
    // 对外提供实例方法-返回对象本身
    public static LogExeManager getInstance() {
        return logExeManager;
    }
    // 定义一个方法
    public void executeLogTask(TimerTask timerTask) {
        executor.schedule(timerTask, LOG_DELAY_TIME, TimeUnit.MICROSECONDS);
    }
}
实现方法如下:
@ApiOperation(value = "用户登出", httpMethod = "POST")
    @PostMapping("/exit")
    public Message accountExit(HttpServletRequest request) {
        SecurityUtils.getSubject().logout();
        Map<String,String > map = getRequestHeader(request);
        String appId = map.get("appId");
        if (StringUtils.isEmpty(appId)) {
            return new Message().error(1111, "用户未登录无法登出");
        }
        String jwt = redisTemplate.opsForValue().get("JWT-SESSION-"+appId);
        if (StringUtils.isEmpty(jwt)) {
            return new Message().error(1111, "用户未登录无法登出");
        }
        redisTemplate.opsForValue().getOperations().delete("JWT-SESSION-"+appId);
        // 日志操作-单例模式
        LogExeManager.getInstance().executeLogTask(LogTaskFactory.exitLog(appId,request.getRemoteAddr(),(short)1,""));
        return new Message().ok(6666, "用户退出成功");
    }

猜你喜欢

转载自blog.csdn.net/u011277745/article/details/80865581
今日推荐