问题更多的是设计部分而不是编码。
我有一个包含手机号码的巨大文件,所以我们要做的就是一次性读取 50 个号码并更新数据库表 startOffset=0
和 endOffset=50
中的偏移量。
现在,开始一一向号码发送短信,完成后,
从文件中选取另外 50 个号码,并将偏移量更新为 startOffset=51
和 endOffset=100
,现在开始发送短信,假设我已经发送短信到 66 个偏移量,当由于多种原因突然断电或应用程序重新启动时,就会出现问题。
现在,当应用程序重新启动时,我将不知道我必须再次启动的偏移量(即在我们的例子中为 67)。我会发现我在 51 到 100 block 中丢失了,所以我能做的就是从 51 开始再次发送短信,但这是错误的,因为短信将发送两次到我们已经发送的号码。
另外,我可以在发送每条短信后将currentPointer
更新到DB,但这会使系统变慢。
有人可以建议最好的方法吗?
最佳答案
如果您想确保重新启动时没有数字被处理两次,那么您需要为每个处理的数字写入持久存储,无论是数据库还是文件。如果写入操作的执行速度对于您的要求来说太慢,请找到一种更快的方法来持久化它,例如另一个表、文件或不同的数据库系统。
关于java - 应用程序重启时的文件读取偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30138074/