我必须每月运行一次包含 150,000+ 项的集合,并且发生的所有事情大约需要 3 到 4 个小时,这很好。问题是有时某些数据会引发exception
(当然,直到第 148,000 项,我的第一次测试运行才发生这种情况(。 我只是将其设置为逻辑上忽略异常(当然会记录它(,但我意识到我并不总是想简单地忽略异常。
我写了一个简单的异常处理程序来处理不同类型的异常以及如果发生某种类型的异常该怎么办;例如,如果我得到一个SQLException
,我会中止该过程,但在NullPointerException
我继续,因为这通常是数据的问题。我还跟踪异常的总数,如果我达到预设的限制,我也会终止该过程。
所以我的问题是:我将构建更多这些程序来处理Collections
中的不同类型的数据。是否有处理集合和处理不同类型的异常的库?
下面是我根据评论请求添加的一些代码。如果你对自己说,"嗯,这做了你想让它做的事情,有什么问题?"你是对的。 但我想知道是否存在一个库,可以让我注册异常以及遇到时该怎么做。例如,我想在发生 A 或 D 类型的异常时停止处理,在 B 发生时继续,除非发生 X 次,当 C 发生时继续,除非发生 Y 次,并完全忽略 E.主要是因为我知道我有不同的数据集和collections
我和其他人将来将使用它们,并希望使用一致的东西。
基本代码片段:
exeptionLimit = 50;
exceptionCount = 0;
for (long id : MyCollection)
{
try
{
//All these methods throw the exceptions
Item item = getItemById(id);
NewData data = ProcessItem(item);
SaveNewData(data);
}
catch (SQLException e)
{
//log
throw e; //I want this to cause the process to fail
}
catch (NullPointerException e)
{
//log
exceptionCount++;
if (exceptionCount >= exceptionLimit) throw new Exception("Limit hit!");
}
}
Collection
表示数据的逻辑分组和一组用于对数据进行操作的函数。
您可以找到提供高级数据结构和比JDK
中提供的更好的性能的库,但是如果我正确理解了您的问题,那么您需要的是理解要在集合之上构建的逻辑。
我的意思是,不同类型的异常之间的分离以及它们是否被记录等是应用程序逻辑的一部分。
它与提供确切信息的集合框架无关。 数据的集合和帮助程序方法
我最终拼凑了自己的解决方案,但最近偶然发现了异步重试模式:
https://github.com/nurkiewicz/async-retry
还有一篇关于它的好文章:
http://nurkiewicz.blogspot.com/2013/07/asynchronous-retry-pattern.html