如果REST控制器类和接口具有使用@HystrixCommand注释的API,则不会加载所有REST API

时间:2016-09-29 16:00:26

标签: java spring-boot spring-cloud hystrix

我已经开始使用spring boot 1.4.1和spring cloud Camden.RELEASE。

我创建了两个简单的REST控制器类及其接口。我已将@HystrixCommand注释放在第一个控制器类的一个API上,并将它们都连接起来。我还在同一个控制器类和接口中添加了fallback方法。代码编译很顺利,服务也很好。但是我看到第一个REST控制器类REST API没有被加载/映射,这意味着调用那些REST API会返回404.我有一个没有任何@HystrixCommand的第二个REST控制器,属于这个类的API加载正常。

如果我只是注释掉'implements<接口名称>'在第一个REST控制器类中,一切都开始工作。

补救措施是什么?

一些虚拟代码片段可帮助您理解问题 -

public interface FirstRESTController {

   @RequestMapping(value = "/aa", method = RequestMethod.GET)
   ResponseEntity<String> getAA();

   @HystrixCommand(fallbackMethod = "reliable")
   @RequestMapping(value = "/bb", method = RequestMethod.GET)
   ResponseEntity<String> getBB();

   public ResponseEntity<String> reliable();
}

@RestController
class FirstRESTControllerImpl implements FirstRESTController {

    @RequestMapping(value = "/aa", method = RequestMethod.GET)
    ResponseEntity<String> getAA() { ... }

    @HystrixCommand(fallbackMethod = "reliable")
    @RequestMapping(value = "/bb", method = RequestMethod.GET)
    ResponseEntity<String> getBB() { ... }

    public ResponseEntity<String> reliable() { ... }
}

---------------------------------------------------------------------
public interface SecondRESTController {

    @RequestMapping(value = "/cc", method = RequestMethod.GET)
    ResponseEntity<String> getCC();
}

@RestController
class SecondRESTControllerImpl implements SecondRESTController {

    @RequestMapping(value = "/cc", method = RequestMethod.GET)
    ResponseEntity<String> getCC() { ... }
}

1 个答案:

答案 0 :(得分:1)

这是一个已知问题。在具有回退的控制器上使用@HystrixCommand不起作用。使用hystrix注释将工作移动到另一个bean。