retryTemplate.execute не се извиква

Използвам шаблон за повторен опит по-долу за изключение, което може да възникне. Блокът retryTemplate.execute никога не се извиква. Дефинирах bean-а за повторен опит, както е показано по-долу. Не съм сигурен дали това е правилният начин. Нов съм в Java и Spring. Всяка помощ ще бъде оценена.

    public class checkUser{ 
    
    RetryTemplate retryTemplate;
        

      public checkUser(){}

      public checkUser(RetryTemplate retryTemplate){

       this.retryTemplate = retryTemplate;}
    

     private RetryTemplate retryConfig()  {
    
            RetryTemplate retryTemplate = new RetryTemplate();
            FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
            fixedBackOffPolicy.setBackOffPeriod(2000l);
            retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
    
    
            SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
            retryPolicy.setMaxAttempts(2);
            retryTemplate.setRetryPolicy(retryPolicy);
    
            return retryTemplate;
    
        }
    
    private void checkGroup() throws Exception {
            retryTemplate = retryConfig();
           
            try {
    
                retryTemplate.execute(new RetryCallback<Object>() {
                    @Override
                    public Object doWithRetry(RetryContext retryContext) throws Exception {
                        if (retryContext.getRetryCount() < 2) { // unexpected disconnection
                            throw new RuntimeException("retry exception");
    
                        }
    
                      //do something
    
    
                        }
    
                        return null;
                    }
                });
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

дефиниран боб както по-долу:

<bean id="checkUser"
          class="com.checkUser">

        <constructor-arg index="1" value="${retryTemplate}" />
        
    </bean>

    <bean id = "retryTemplate" class="com.checkUser">

    </bean>

person Suhana    schedule 20.02.2021    source източник


Отговори (1)


Пролетният боб е напълно пасивен; изпълнението няма да бъде извикано, докато нещо не извика checkGroup().

Също така не трябва да извиквате retryConfig() за всяко повикване, което просто ще презапише подаденото в конструктора.

Вашата XML конфигурация изобщо няма смисъл.

Имате нужда от <constructor-arg ref="templateBean"/>, където templateBean е компонент от тип RetryTemplate.

person Gary Russell    schedule 22.02.2021