Почему 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.