java IO操作改为内存操作



    private static final int MAX_Request = 10000;
    private static final LinkedBlockingQueue<StudentProductCustomPermissionValueBO> requestQueue = new LinkedBlockingQueue<>(MAX_Request);


    @PreDestroy
    @Scheduled(fixedDelay = 1000)
    public void onTick() {
        if (requestQueue.isEmpty()) {
            return;
        }
        List<StudentProductCustomPermissionValueBO> requests = new ArrayList<>(requestQueue.size());
        requestQueue.drainTo(requests);
        save(requests);
    }

    public void offer(StudentProductCustomPermissionValueBO request) {
        while (!requestQueue.offer(request)) {
            // 如果队列满了,进行批量处理
            onTick();
        }
    }

    private void save(List<StudentProductCustomPermissionValueBO> requests) {

        Map<Integer, List<StudentProductCustomPermissionValueBO>> groupBy = requests.stream()
                .collect(Collectors.groupingBy(StudentProductCustomPermissionValueBO::getStudentId));
        for (List<StudentProductCustomPermissionValueBO> rowList : groupBy.values()) {
            StudentProductCustomPermissionValueBO row0 = rowList.get(0);
            Integer studentId = row0.getStudentId();
            Integer productCode = row0.getProductCode();
            String fieldKey = row0.getFieldKey();

            List<String> hexList = rowList.stream()
                    .map(StudentProductCustomPermissionValueBO::getHex)
                    .distinct()
                    .collect(Collectors.toList());

            studentProductCustomPermissionValueService.incrementUsed(
                    studentId,
                    productCode,
                    fieldKey,
                    hexList);
        }
    }



©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容