基于Spring数据超时的数据批量插入



我有一个spring-boot应用程序,它从不同的设备接收数据,我需要批量插入这些数据以最大限度地提高性能。为此,我考虑将数据存储在内存中一段时间,然后调用内置的spring数据saveAll方法以保存为批处理。但我的问题是,数据不是以正常的速度来的,我可能一次得到几千个数据,然后在接下来的几个小时内没有数据。因此,我不确定如何正确构建批次,因为最后可能很少有数据会被固定大小的批次遗漏。有没有一种方法可以在java/spring中执行定时批处理,在配置的超时后刷新批处理?

我目前正在使用BlockingQueue和Guauva的Queues.drain

executorService.submit(() -> {
while (true) {
try {
String first = queue.take();
List<String> output = new LinkedList<>();
output.add(first);
Queues.drain(queue, output, BATCH_SIZE - 1, 5, TimeUnit.SECONDS);
repo.saveAll(output);
} catch (Exception e) {
e.printStackTrace();
}
}
});

我在哪里从生产者线程执行queue.add((

最新更新