java - PageRequest:页面值重叠
问题描述
我有一个表,必须使用分页(带批处理)来更新表中关于 prio 的记录。我必须在关于列优先级刷新的列中设置今天的日期。
id, prio, refreshed
ID = 12,HIGH,2021-11-07T12:36:09.352Z
ID = 10,HIGH,2021-11-01T12:36:09.352Z
ID = 13,HIGH,2021-11-07T12:36:09.352Z
ID = 1,HIGH,2021-09-07T12:36:09.352Z
ID = 20,HIGH,2021-09-07T12:36:09.352Z
ID = 115,HIGH,2021-09-07T12:36:09.352Z
ID = 11,HIGH,2021-11-07T12:36:09.352Z
ID = 22,LOW,2021-09-07T12:36:09.352Z
ID = 21,LOW,2021-09-07T12:36:09.352Z
ID = 2,LOW,2021-09-07T12:36:09.352Z
ID = 19,LOW,2021-09-07T12:36:09.352Z
ID = 18,LOW,2021-09-07T12:36:09.352Z
ID = 14,LOW,2021-11-07T12:36:09.352Z
ID = 15,LOW,2021-11-07T12:36:09.352Z
ID = 7,LOW,2021-11-10T12:36:09.352Z
ID = 8,LOW,2021-11-10T12:36:09.352Z
ID = 9,LOW,2021-11-10T12:36:09.352Z
ID = 3,LOW,2021-09-07T12:36:09.352Z
ID = 6,LOW,2021-09-07T12:36:09.352Z
ID = 5,LOW,2021-09-07T12:36:09.352Z
ID = 4,LOW,2021-09-07T12:36:09.352Z
为此,我有这个类的方法。
private Flux<Long> doUpdate() {
return Flux.<Page<DbConnection>, AtomicInteger>generate(
() -> updatePage,
(state, sink) -> {
final int page = state.get();
final Order refreshed = Order.asc("refreshed").nullsFirst();
final Order prio = Order.asc("prio");
PageRequest pageable = PageRequest.of(page, pageSize, Sort.by(prio));
Page<DbConnection> all = dbConnectionRepository.sortByRefreshed(pageable);
final Page<DbConnection> beforeUpdate = dbConnectionRepository.findAll(PageRequest.of(0, 21, Sort.by(prio)));
for (DbConnection dbConnection : beforeUpdate) {
LOG.info("beforeUpdate page ={}, ID = {},{},{}", page, dbConnection.getId(), dbConnection.getPrio(), dbConnection.getRefreshed());
}
for (DbConnection dbConnection : all) {
LOG.info("What we need to update {}, ID = {},{},{}", page, dbConnection.getId(), dbConnection.getPrio(), dbConnection.getRefreshed());
}
sink.next(all);
if (all.isLast()) {
LOG.info("No more entries to update {} ...", page);
sink.complete();
}
state.incrementAndGet();
return state;
})
.doOnNext(page -> LOG.info("Starting batch {} ...", page.getNumber()))
.doOnError(
throwable ->
LOG.error("Error requesting next page of dbConnection to be updated", throwable))
.limitRate(1)
.retry(3)
.metrics()
.flatMap(page -> Flux.fromStream(page.stream()))
.metrics()
.filter(this::updateNeeded)
.metrics()
.map(DbConnection::getId);
}
它应该可以工作,但并非数据表中的所有记录都已更新...我设置 Page Size = 5,它应该从数据表中获取 5 页(表中总共有 21 条记录)。就我而言,我有 5 页,页面值重叠很奇怪。
page =: 0, ID = 12,HIGH,2021-11-07T12:36:09.352Z
page =: 0, ID = 13,HIGH,2021-11-07T12:36:09.352Z
page =: 0, ID = 10,HIGH,2021-11-01T12:36:09.352Z
page =: 0, ID = 20,HIGH,2021-09-07T12:36:09.352Z
page =: 0, ID = 1,HIGH,2021-09-07T12:36:09.352Z
page =: 1, ID = 115,HIGH,2021-09-07T12:36:09.352Z
page =: 1, ID = 1,HIGH,2021-11-14T21:21:09.229028Z
page =: 1, ID = 19,LOW,2021-09-07T12:36:09.352Z
page =: 1, ID = 18,LOW,2021-09-07T12:36:09.352Z
page =: 1, ID = 21,LOW,2021-09-07T12:36:09.352Z
page =: 2, ID = 22,LOW,2021-09-07T12:36:09.352Z
page =: 2, ID = 19,LOW,2021-11-14T21:21:20.993530Z
page =: 2, ID = 14,LOW,2021-11-07T12:36:09.352Z
page =: 2, ID = 4,LOW,2021-09-07T12:36:09.352Z
page =: 2, ID = 5,LOW,2021-09-07T12:36:09.352Z
page =: 3, ID = 3,LOW,2021-09-07T12:36:09.352Z
page =: 3, ID = 2,LOW,2021-09-07T12:36:09.352Z
page =: 3, ID = 6,LOW,2021-09-07T12:36:09.352Z
page =: 3, ID = 8,LOW,2021-11-10T12:36:09.352Z
page =: 3, ID = 5,LOW,2021-11-14T21:21:56.287378Z
page =: 4, ID = 8,LOW,2021-11-10T12:36:09.352Z
帮助查找错误,使页面中的值不重叠
解决方案
推荐阅读
- java - 迷宫回溯水平移动
- css - 尝试通过 scss 用 className 设置 react-select 样式,className 没有显示
- python - 在python中安装点云库(PCL)
- python - 具有虚数指数的 Numpy 精度
- javascript - 从 java 脚本中获取值
- android - 防止 CheckedTextView 在单击时更改检查状态
- python - 在 Python 中,绘制具有相同 x 和 y 轴的不同类别数据的方法是什么?
- python - 该程序不会告诉用户是赢了还是输了它只是一直说他们平手
- python - 在 Mac 上遇到 os.startfile() 问题并实施解决方案
- linux - bin/bash:无法在 Docker 容器上执行二进制文件