Apache Camel SQL 组件以批处理模式选择所有记录

问题描述 投票:0回答:1

我使用 apache Camel 作为从 (

select *...
) PostgreSQL 到 (
insert...
) MariaDB 的 ETL。

PostgreSQL中有很多记录(超过1M),我想以批处理的方式进行。

我尝试过使用几个标志(

batchCount
batchSize
),但没有一个有效。

我也在 Apache Camel 文档中进行了搜索,但没有成功。

from("sql:SELECT * FROM my_schema.trees?dataSource=#postgersqlDataSource&batch=true")
            .convertBodyTo(String.class)
            .process(ex -> {
                log.info("batch insert for single table");
                List<Map<String, Object>> rows = ex.getIn().getBody(List.class);
                log.info(String.format("Value: %s", rows.size()));
            })
            .to("stream:out");

但是程序崩溃了,因为它将所有内容加载到内存中(当然可以使用 1 条记录)。

有什么建议吗?

它超出了

Spring boot

java spring spring-boot jpa apache-camel
1个回答
1
投票

batch
选项仅适用于生产者(例如to)。 https://camel.apache.org/components/4.4.x/sql-component.html

相反,请查看

outputType=StreamList
,您可以将其与拆分 EIP(在流模式下)结合起来来处理行,而无需将所有行加载到内存中。

这也意味着您一次处理 1 行

from sql
  split
    process (1 row here)
© www.soinside.com 2019 - 2024. All rights reserved.