Почему Spring MVC 4 и интеграция Hystrix не работают без Spring boot API?

Прежде чем я начну, позвольте мне сказать, что я пытаюсь интегрировать приложение Spring MVC 4 с Hystrix(то есть, используя hystrix-javanica для полной поддержки аннотаций). Ниже мой кусок кода....
Класс конфигурации:

@Configuration
public class BeanConfig {

    @Bean
    public HystrixCommandAspect hystrixCommandAspect() {
        return new HystrixCommandAspect();
    }
}

Hystrix включен класс обслуживания

@Service(value="userRepository")
public class UserRepositoryImpl implements UserRepository{

    @Override
    @HystrixCommand(fallbackMethod = "failService",
                    commandProperties = {
                            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "500")
                    },
                    threadPoolProperties = {
                            @HystrixProperty(name = "coreSize", value = "30"),
                            @HystrixProperty(name = "maxQueueSize", value = "101"),
                            @HystrixProperty(name = "keepAliveTimeMinutes", value = "2"),
                            @HystrixProperty(name = "queueSizeRejectionThreshold", value = "15"),
                            @HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "12"),
                            @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "1440")
                    })
    public User getUserByAuthentication(String username) {
        throw new RuntimeException("delegately throwing exception");//intentionally throwing exception to check fallback service
    }

    @HystrixCommand
    public User failService(String username) {
        System.out.println("in the fallback service");
        return new User(username);
    }
}

И это класс контроллера

@Autowired
@Qualifier("userRepository")
private UserRepository userRepository;

@RequestMapping(method = RequestMethod.POST)
public String init(HttpServletRequest request, HttpServletResponse response) throws InterruptedException, ExecutionException {
    System.out.println("in controller getting value as :" + userRepository.getUserByAuthentication("testvalue"));
    return "some page";     
}

Теперь, когда я запускаю это приложение, генерируется исключение, но после этого не вызывается резервный сервис. Я пытался отладить, но после исключения рабочий процесс останавливается.
Может кто-нибудь, пожалуйста, помогите мне с этим?

1 ответ

При использовании AspectJ с Spring (и без Spring Boot) вам нужно будет сказать Spring что-то сделать с @Aspect аннотированные бобы это обнаруживает. По умолчанию они просто игнорируются.

Для этого вам нужно будет добавить @EnableAspectJAutoProxy в вашей конфигурации (или <aop:aspectj-autoproxy /> в XML). Это проинструктирует Spring применить @Aspect аннотированные бины, которые он обнаруживает в контексте.

Все это довольно подробно описано в разделе " Включение поддержки @AspectJ" справочного руководства Spring.

Другие вопросы по тегам