我们正在优化一些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。