春季批处理:MySQL分页

时间:2020-04-23 15:04:48

标签: java mysql spring spring-batch

我想在Kafka主题中从大型表MySQL发送600000000条消息。 我想使用Spring Batch进行这种使用,但是它使用查询类型:

SELECT c1, c2, c3 FROM t1 LIMIT offset, size;

在spring-batch / spring-batch-infrastructure / src / main / java / org / springframework / batch / item / database / support / MySQLPagingQueryProvider.java中生成:

public String generateJumpToItemQuery(int itemIndex, int pageSize) {
    int page = itemIndex / pageSize;
    int offset = (page * pageSize) - 1;

    offset = offset<0 ? 0 : offset;

    String limitClause = new StringBuilder().append("LIMIT ").append(offset).append(", 1").toString();

    return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);

}

该解决方案非常慢,因为LIMIT offset, size涉及在每次迭代中重新读取。我更喜欢:

SELECT c1, c2, c3 FROM t1 WHERE primary > last_primary_lot LIMIT size;

有可能吗?

0 个答案:

没有答案