我正在尝试使用spring-retry
处理异常时实现重试尝试功能。如下面的代码示例所述,我正在使用@Retryable
。但是我在这里面临一个奇怪的问题。
使用此批注时,它会重试3次,这是默认设置,但不会引发自定义异常,即我为应用程序创建的MyGraphDBServiceException
。而是抛出ArrayIndexOutOfBoundException
。当我从方法中删除该批注时,将得到预期的MyGraphDBServiceException
。
即使使用此注释,如何确保MyGraphDBServiceException
被抛出?
@Override
@Retryable(value = {MyGraphDBServiceException.class, MyGraphDBRedisServiceException.class}, backoff = @Backoff(delay = 1000))
public Long beginTransaction() {
//TODO: provide custom exception handling here
if (configs.isEmpty())
throw new MyGraphDBServiceException(SERVICE_UNAVAILABLE_EXCEPTION);
Long txnId = null;
List<TransactionObject> txnList = new LinkedList<>();
try {
//should throw exception here which should be MyGraphDBServiceException
txnId = txnList.get(0).getTransactionId();
Gson gson = new Gson();
String txnString = gson.toJson(txnList);
redisServiceUtility.add(String.valueOf(txnId), txnString);
} catch (Exception e) {
//TODO: provide custom exception handling here
log.error("[Exception] Caught in redis: {}", e.getMessage());
throw new MyGraphDBServiceException(SERVICE_UNAVAILABLE_EXCEPTION);
}
return txnId;
}
为清楚起见,当我运行相同的代码但没有MyGrpahDBServiceException
注释时,我确实得到了@Retryable
。因此,请不要以为我的代码应该抛出ArrayIndexOutOfBoundException
而不是自定义代码。