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);
}
}
java IO操作改为内存操作
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 序列流 序列流可以把多个字节输入流整合成一个,从序列流中读取数据时,将从被整合的第一个流开始读,读完一个读第二个,...
- 缓冲IO 在介绍缓冲IO之前需要先了解一下常用的机械硬盘的原理与特点 一个机械硬盘中装有多个盘片 每个盘片上有多个...
- 详见链接https://www.cnblogs.com/sunsky303/p/8962628.html 1.标准...
- 相关IO专题 JAVA IO专题一:java InputStream和OutputStream读取文件并通过soc...
- 相关java IO专题 JAVA IO专题一:java InputStream和OutputStream读取文件并...