使用spring`@ Retryable`注释时不会引发自定义异常

时间:2019-02-28 20:32:18

标签: java spring spring-retry

我正在尝试使用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而不是自定义代码。

0 个答案:

没有答案