优化Spring Boot REST控制器/冗余请求处理程序查找

时间:2018-08-15 16:13:59

标签: spring rest spring-boot controller

我们正在优化一些Spring Boot REST控制器,并且注意到(相对)大量的处理请求的时间由Spring占用,以寻找适当的映射:

2018-08-15 16:55:10.869 DEBUG 66904 --- [nio-8080-exec-8]  o.s.b.w.s.f.OrderedRequestContextFilter [] [] : Bound request context to thread: org.apache.catalina.connector.RequestFacade@63780123
2018-08-15 16:55:10.875 DEBUG 66904 --- [nio-8080-exec-8] s.b.a.e.w.s.WebMvcEndpointHandlerMapping [] [] : Looking up handler method for path /service/check_message
2018-08-15 16:55:10.890 DEBUG 66904 --- [nio-8080-exec-8] s.b.a.e.w.s.WebMvcEndpointHandlerMapping [] [] : Did not find handler method for [/service/check_message]
2018-08-15 16:55:10.891 DEBUG 66904 --- [nio-8080-exec-8] a.e.w.s.ControllerEndpointHandlerMapping [] [] : Looking up handler method for path /service/check_message
2018-08-15 16:55:10.891 DEBUG 66904 --- [nio-8080-exec-8] a.e.w.s.ControllerEndpointHandlerMapping [] [] : Did not find handler method for [/service/check_message]
2018-08-15 16:55:10.891 DEBUG 66904 --- [nio-8080-exec-8] s.w.s.m.m.a.RequestMappingHandlerMapping [] [] : Looking up handler method for path /service/check_message
2018-08-15 16:55:10.891 DEBUG 66904 --- [nio-8080-exec-8] s.w.s.m.m.a.RequestMappingHandlerMapping [] [] : Returning handler method [public org.springframework.http.ResponseEntity<com.infracast.ams.model.CheckResponse> com.infracast.ams.controller.CheckMessageController.messageCheck(com.infracast.ams.model.CheckRequest)]
2018-08-15 16:55:10.891 DEBUG 66904 --- [nio-8080-exec-8]     o.s.b.f.s.DefaultListableBeanFactory [] [] : Returning cached instance of singleton bean 'checkMessageController'
2018-08-15 16:55:10.892  INFO 66904 --- [nio-8080-exec-8]   com.infracast.ams.RequestLoggingFilter [] [DEV1] : POST /ams/service/check_message by 'DEV1'

上述记录的最后一行是我们编写的第一段代码。

这是被称为的控制器:

@RestController
@RequestMapping("/service/check_message")
@Consumes("application/json")
@Produces("application/json")
public class CheckMessageController {

    @RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<CheckResponse> messageCheck(@RequestBody @Valid CheckRequest request) {
        ...
    }
}

我现在感兴趣的是如何避免Spring使用'WebMvcEndpointHandlerMapping'和'ControllerEndpointHandlerMapping'进行两次失败的映射尝试,因为这将节省大约15ms。

0 个答案:

没有答案