gpt4 book ai didi

java - Java同步脚本

转载 作者:行者123 更新时间:2023-12-01 11:22:00 27 4
gpt4 key购买 nike

我正在尝试创建一个 java 类,它将连接到在线服务,查找一个值,然后在我的数据库中更新该值。这是一个相对简单的任务,但由于它是一个很大的值集,我有条件以数据 block (比方说 100)执行此任务。

所以这个ServiceSyncer类应该(?)执行以下伪代码:

 while (select Objects where timestamp < today, limit 100 )  returns items {
foreach Object {
try {
connect to Service for Object.attribute
extract attribute value
If attribute value has changed {
update Object {
set attribute value
}
}
} catch exception {
log exception
}
update timestamp = now()
}
}

此循环将以 100 个 block 为单位更新所有对象,直到查找完所有对象。 查找期间失败的对象将保持失败状态,直到下次同步器再次执行为止。

从概念上讲,解决这个问题的好方法是什么?

**上面的伪代码在尝试实现时看起来不太过时。

类似的东西会起作用,但我想知道是否有更好的方法

JAVA

    boolean keepProcessing = true;
int startIndex = 0;
int endIndex = 0;

while (keepProcessing) {
endIndex = startIndex + 100;
if (endIndex > publist.size() - 1) {
endIndex = publist.size() - 1;
keepProcessing = false;
}

List<ObjectJPA> currentBatchList = publist.subList(startIndex, endIndex);

for (int i = 0; i < currentBatchList.size(); i++) {
// do staff
}

repository.save(currentBatchList);
}

最佳答案

由于我没有足够的分数来提供评论,因此我将我的解决方案作为答案而不是评论提交。

我更喜欢用不同的方法来更新对象的状态

选项A:

1)您可以从服务A中的数据库中获取对象的状态。

2) 当您的在线服务 B 中的对象发生更改时,该服务将仅通过服务调用(首选 http 调用)通知您的服务 A

3) 您将用服务调用替换整个 while 循环。如果步骤 1 中的对象发生更改,则仅从服务 A 更新数据库中已修改的对象。

选项B:

1) 在这两个服务之间维护分布式缓存。如果对象发生变化,则仅用修改后的值更新数据库。

关于java - Java同步脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31117535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com