SynThreadPool.addAuthorityChangeSynRunnable( new ManagerLogAccessSynRunnable(iManagerAccessLogService, logJsonObject));
package com.infosec.ztpdp.policycenter.thred; import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * Title : 同步执行线程池 Description : 用于数据同步 Company : 融信 * * @author lw * @date 2017年2月10日 下午2:43:20 */ public class SynThreadPool { /** 线程池等待队列长度 ,超过50 自动丢失 */ public static final Integer POOL_WAIT_LENGTH = 50; /** 阻塞队列 */ volatile static BlockingQueue<Runnable> POOL_CACHE = new LinkedBlockingQueue<Runnable>(); /** 批量分配用户角色岗位用户组等,触发同步同步线程池 */ private final static ThreadPoolExecutor AuthorityChange_SYN_POOL = newThreadPoolExecutor(); private static ThreadPoolExecutor newThreadPoolExecutor() { ThreadPoolExecutor pool = new ThreadPoolExecutor( // 核心线程数量(执行线程数量) 1, // 线程池最大线程数量 1, // 线程池大于 核心线程池 的时候 没有执行任务最多保持时间 (到时终止) 5L, // 保持线程 时间 单位 。 例如此刻是5分钟(分钟) TimeUnit.MINUTES, // 阻塞列队,用于等待线程 POOL_CACHE, /* * 拒绝策略: 自定义:SynRejectedExecutionHandler * 默认 :由调用线程处理该任务 */ new ThreadPoolExecutor.CallerRunsPolicy()); pool.allowCoreThreadTimeOut(true); return pool; } /** 线程池里的任务线程名称 */ volatile static List<String> RUN_CACHE = new ArrayList<String>(); /** 删除线程池里任务名称 */ public static synchronized void remove(final String taskName) { RUN_CACHE.remove(taskName); } /** 线程池里是否包含任务名称 */ public static boolean contains(String taskName) { return RUN_CACHE.contains(taskName); } /** 批量分配用户角色岗位用户组等,触发同步 */ public static void addAuthorityChangeSynRunnable(ManagerLogAccessSynRunnable authorityChangeSynRunnable) { AuthorityChange_SYN_POOL.execute(authorityChangeSynRunnable); } }
package com.infosec.ztpdp.policycenter.thred; import java.util.Date; import org.drools.core.util.StringUtils; import com.alibaba.fastjson.JSONObject; import com.infosec.ztpdp.policycenter.common.dbbase.snowflake.IdWorkerBuilder; import com.infosec.ztpdp.policycenter.common.util.Const; import com.infosec.ztpdp.policycenter.common.util.deciphering.EncryptionFactory; import com.infosec.ztpdp.policycenter.common.util.log.LogConst; import com.infosec.ztpdp.policycenter.module.audit.entity.ManagerAccessLogBean; import com.infosec.ztpdp.policycenter.module.audit.service.IManagerAccessLogService; /** * * <p> * 管理员登录日志线程记录 * </p> * * <p> * 版权所有:北京信安世纪科技股份有限公司 (c) 2022 * </p> * * @author jlcui * @date: 2023年8月29日 上午11:39:46 * */ public class ManagerLogAccessSynRunnable implements Runnable{ private IManagerAccessLogService iManagerAccessLogService; /** * 存储日志数据 */ private JSONObject jsonObject; public ManagerLogAccessSynRunnable(final IManagerAccessLogService iManagerAccessLogService,final JSONObject jsonObject) { this.iManagerAccessLogService = iManagerAccessLogService; this.jsonObject = jsonObject; } @Override public void run() { try { if(!jsonObject.isEmpty()) { ManagerAccessLogBean log = new ManagerAccessLogBean(); log.setId(IdWorkerBuilder.ID_WORKER.nextId()); log.setLoginname(jsonObject.getString(LogConst.LOG_LOGINNAME)); log.setUsername(jsonObject.getString(LogConst.LOG_USERNAME)); log.setLogcode(jsonObject.getString(LogConst.LOG_LOGCODE)); log.setUserip(jsonObject.getString(LogConst.LOG_CLIENTIP)); log.setCreateDate(new Date()); log.setOperation(jsonObject.getInteger(LogConst.LOG_HOWS)); log.setDetails(jsonObject.getString(LogConst.LOG_EVENTDES)); log.setResult(jsonObject.getInteger(LogConst.LOG_RESULT)); //数据加密 String dataEncryption = log.getLoginname()+log.getUsername()+log.getLogcode()+log.getUserip()+log.getOperation()+log.getDetails()+log.getResult(); log.setSignature(EncryptionFactory.getEncryptions(Const.AUDIT_ENCRYPTION_MODE).encrypt(dataEncryption)); iManagerAccessLogService.insert(log); } } catch (Exception e) { e.printStackTrace(); } } }