spring-data-jpa 基于Spring Data 超时的数据批量插入

2j4z5cfb  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(252)

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

sg24os4d

sg24os4d1#

我目前正在使用BlockingQueue和Guauva的Queues来完成这项工作。

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()

相关问题