SynThreadPool线程

发布时间 2023-08-30 12:03:16作者: JLCUI
		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();
		}
	}
}