【发布时间】:2012-03-21 08:13:37
【问题描述】:
当我必须对数据库和网络操作进行重试时,我遇到了多种情况。无论我在哪里做,我都有以下类型的代码:
for (int iteration = 1; ; iteration++) {
try {
data = doSomethingUseful(data);
break;
} catch (SomeException | AndAnotherException e) {
if (iteration == helper.getNumberOfRetries()) {
throw e;
} else {
errorReporter.reportError("Got following error for data = {}. Continue trying after delay...", data, e);
utilities.defaultDelayForIteration(iteration);
handleSpecificCase(data);
}
}
}
问题在于,这个 Code Pattern 被复制粘贴到我的所有课程中。这真的很糟糕。我不知道如何摆脱这种 for-break-catch 复制粘贴模式,因为我通常会处理不同的异常,我想记录我失败的数据(通常也是不同的方式)。
在 Java 7 中是否有避免这种复制粘贴的好方法?
编辑:我确实使用 guice 进行依赖注入。我确实检查了异常。可能有多个变量,而不仅仅是一个数据,而且它们都是不同的类型。
Edit2:AOP 方法对我来说似乎是最有前途的。
【问题讨论】:
-
如果这都是数据库访问代码,为什么异常经常不同?你能举几个例子吗?
-
我刚刚编辑了这个问题,但原因是有数据库和网络,甚至只是数据库,取决于操作,它会因不同的异常而失败。 doSomethingUseful() 也可能会抛出我自己想以相同方式处理的异常。
-
异常是选中还是未选中?
-
有已检查和未检查的异常
-
有一个类似的问题:stackoverflow.com/questions/13239972/…我接受了答案。
标签: java exception copy-paste