Java Spring MVC响应时间太长
我有一个简单的控制器方法,它调用spring数据存储库并返回几个对象Java Spring MVC响应时间太长,java,json,spring,spring-mvc,Java,Json,Spring,Spring Mvc,我有一个简单的控制器方法,它调用spring数据存储库并返回几个对象 @RequestMapping(value="/api/learnitemlists", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<Iterable<LearnItemList>> getLearnItemLists(@RequestParam(v
@RequestMapping(value="/api/learnitemlists", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<Iterable<LearnItemList>> getLearnItemLists(@RequestParam(value="fromLanguages") Optional<List<String>> fromLanguages,
@RequestParam(value="toLanguage") Optional<String> toLanguage,
@RequestParam("pagenumber") Integer pageNumber,
@RequestParam("pagesize") Integer pageSize) {
LOGGER.debug("start of learnItemLists call");
Page<LearnItemList> lists;
lists = learnItemListRepositoryCustom.findBasedOnLanguage(fromLanguages,toLanguage,new PageRequest(pageNumber,pageSize));
HttpHeaders headers = new HttpHeaders();
headers.add("X-total-count", Long.toString(lists.getTotalElements()));
headers.add("Access-Control-Expose-Headers", "X-total-count");
ResponseEntity<Iterable<LearnItemList>> result = new ResponseEntity<Iterable<LearnItemList>>(lists,headers,HttpStatus.OK);
LOGGER.debug("end of learnItemLists call");
return result;
}
@RequestMapping(value=“/api/learnitemlists”,method=RequestMethod.GET,products=MediaType.APPLICATION\u JSON\u UTF8\u value)
public ResponseEntity GetLearnItemList(@RequestParam(value=“fromLanguages”)可选fromLanguages,
@RequestParam(value=“toLanguage”)可选toLanguage,
@RequestParam(“pagenumber”)整数pagenumber,
@RequestParam(“pagesize”)整数(pagesize){
debug(“learnItemList调用的开始”);
页面列表;
lists=learnItemListRepositoryCustom.findBasedOnLanguage(从语言、到语言、新页面请求(页码、页面大小));
HttpHeaders=新的HttpHeaders();
headers.add(“X-total-count”,Long.toString(lists.getTotalElements());
headers.add(“访问控制公开头”,“X-total-count”);
ResponseEntity结果=新的ResponseEntity(列表、标题、HttpStatus.OK);
debug(“learnItemList调用结束”);
返回结果;
}
我记录了方法调用的开始和结束:
22:06:11.914 - 22:06:12.541
因此,从数据库中实际检索对象的时间不到1秒。然而,整个请求花费了大约2.68美元 在浏览器中尝试时(集成测试显示类似的性能)
我忍不住觉得出了什么事。序列化为JSON(我正在使用Jackson)需要这么长时间吗?整个JSON响应大约为1KB
那么,这是否正常(我对此表示怀疑),如果不正常,我应该采取什么步骤来找出原因?序列化json可能需要一段时间,这取决于一些事情。您的数据库获取可能是延迟地拉取对象,然后json序列化将从数据库加载每个字段。如果这是问题的话,您可能会看到即时加载的不同性能。您是否使用JPA for learnItemListRepositoryCustom?我可以问一下learnItemListRepositoryCustom实现了什么接口吗?对于JPA@Entity,我已经被这个FetchTpye=LAZY vs EGAR延迟咬了一口。另外,你几乎忘记了你在使用缓存机制吗?e、 艾希奇?