java 做插入查找时候使用线程池提高系统性能

调用线程池类方式:

executorSupport.addTask(ExecutorSupport.BIZ_OPERATE_RECODE, new UserOperateRecordTask(userOperateRecordEntity, userOperateRecordMapper));
@Service
public class ExecutorSupport {

    private static final Logger LOGGER = LoggerFactory.getLogger();

    //交易订单流水记录
    public static final String BIZ_TRADE_ORDER_LOG = "biz_user_order_log";

    //用户操作记录
    public static final String BIZ_OPERATE_RECODE = "biz_operate_recode";


    //线程池容器
    private static Map<String, ExecutorService> EXECUTOR_MAP = new HashMap<String, ExecutorService>();

    public void addTask(String biz, Runnable task) {
        try {
            if (StringUtil.isBlank(biz)) {
                LOGGER.error(LogBuilderUtil.getBuilder("addTask", "将任务提交到线程池中", "非法biz")
                        .appendParam("biz", biz)
                        .appendParam("task", task)
                        .build());
                return;
            }
            if (!EXECUTOR_MAP.containsKey(biz)) {
                synchronized (this) {
                    if (!EXECUTOR_MAP.containsKey(biz)) {
                        EXECUTOR_MAP.put(biz, Executors.newCachedThreadPool());
                    }
                }

            }
            if (EXECUTOR_MAP.get(biz) == null || EXECUTOR_MAP.get(biz).isShutdown()) {
                LOGGER.error(LogBuilderUtil.getBuilder("addTask", "将任务提交到线程池中", "线程池状态异常")
                        .appendParam("biz", biz)
                        .appendParam("task", task)
                        .appendParam("EXECUTOR_MAP", JSON.toJSONString(EXECUTOR_MAP.keySet()))
                        .build());
                return;
            }
            EXECUTOR_MAP.get(biz).submit(task);
            LOGGER.info(LogBuilderUtil.getBuilder("addTask", "将任务提交到线程池中", "放入线程池成功")
                    .appendParam("biz", biz)
                    .appendParam("task", task)
                    .build());
        } catch (Exception e) {
            LOGGER.error(LogBuilderUtil.getBuilder("addTask", "将任务提交到线程池中", "Exception")
                    .appendParam("biz", biz)
                    .appendParam("task", task)
                    .build(), e);
        }
    }

}

public class UserOperateRecordTask implements Runnable {

    private static final Logger LOGGER = LoggerFactory.getLogger();

    private UserOperateRecordEntity userOperateRecordEntity;

    private UserOperateRecordMapper userOperatRecordMapper;

    public UserOperateRecordTask(UserOperateRecordEntity userOperateRecordEntity, UserOperateRecordMapper userOperatRecordMapper) {
        this.userOperateRecordEntity = userOperateRecordEntity;
        this.userOperatRecordMapper = userOperatRecordMapper;
    }

    @Override
    public void run() {
        try {
            this.validParam();
            userOperatRecordMapper.insert(userOperateRecordEntity);
            LOGGER.info(LogBuilderUtil.getBuilder("UserOperateRecordTask", "记录用户行为日志", "成功")
                    .appendParam("info", userOperateRecordEntity.getCustId() + "|" + userOperateRecordEntity.getBizCode())
                    .build());
        } catch (Exception e) {
            LOGGER.error(LogBuilderUtil.getBuilder("UserOperateRecordTask", "记录用户行为日志", "Exception")
                    .appendParam("userOperateRecordEntity", userOperateRecordEntity)
                    .build(), e);
        }
    }

    private void validParam() {
        String remark = userOperateRecordEntity.getMark();
        if (remark != null && remark.length() > 128) {
            userOperateRecordEntity.setMark(remark.substring(0, 128));
        }
    }


}

猜你喜欢

转载自blog.csdn.net/fight_man8866/article/details/81296847
今日推荐