title: Trying to exclude an exception using @Retryable - causes ExhaustedRetryException to be thrown
body: <p>I'm trying to use <code>@Retryable</code> on a method that calls the REST template. If an error is returned due to a communication error, I want to retry otherwise I want to just thrown an exception on the call.</p>
  
  <p>When the ApiException occurs, instead of it being thrown and ignored by @Retryable, I get an <code>ExhaustedRetryException</code> and a complaint about not finding enough 'recoverables', i.e, <code>@Recover</code> methods.</p>
  
  <p>I thought I'd see if just having the recoverable method present might make it happy and still perform as hoped for. Not so much. Instead of throwing the exception, it called the recoverable method.</p>
  
  <pre><code>@Retryable(exclude = ApiException include = ConnectionException, maxAttempts = 5, backoff = @Backoff(multiplier = 2.5d, maxDelay = 1000000L, delay = 150000L))
  Object call(String domainUri, ParameterizedTypeReference type, Optional&lt;?&gt; domain = Optional.empty(), HttpMethod httpMethod = HttpMethod.POST) throws RestClientException {
  
      RequestEntity request = apiRequestFactory.createRequest(domainUri, domain, httpMethod)
      log.info "************************** Request Entity **************************"
      log.info "${request.toString()}"
      ResponseEntity response
  
      try {
  
          response = restTemplate.exchange(request, type)
          log.info "************************** Response Entity **************************"
          log.info "${response.toString()}"
  
      } catch (HttpStatusCodeException | HttpMessageNotWritableException httpException) {
  
          String errorMessage
          String exceptionClass = httpException.class.name.concat("-")
          if(httpException instanceof HttpStatusCodeException) {
  
              log.info "************************** API Error **************************"
              log.error("API responded with errors: ${httpException.responseBodyAsString}")
              ApiError apiError = buildErrorResponse(httpException.responseBodyAsString)
              errorMessage = extractErrorMessage(apiError)
  
              if(isHttpCommunicationError(httpException.getStatusCode().value())) {
                  throw new ConnectionException(exceptionClass.concat(errorMessage))
              }
          }
  
          errorMessage = StringUtils.isBlank(errorMessage) ? exceptionClass.concat(httpException.message) : exceptionClass.concat(errorMessage)
          throw new ApiException(httpMethod, domainUri, errorMessage)
  
      }
  
      if (type.type == ResponseEntity) {
          response
      }
      else response.body
  
  }
  
  @Recover
  Object connectionException(ConnectionException connEx) {
      log.error("Retry failure - communicaiton error")
      throw new ConnectionException(connEx.class.name + " - " + connEx.message)
  }
  </code></pre>
  
  <p>Any insights would be appreciated. Is it a bug or operator error?
  This is using Spring Boot 1.3.6 and Spring-Retry 1.1.3.</p>