【问题标题】:Specification and XML parsing with lot of entities -> out of memory error使用大量实体进行规范和 XML 解析 -> 内存不足错误
【发布时间】:2019-05-06 00:48:47
【问题描述】:

我有一个请求,要在我的数据库中使用规范查找大量实体。

getting them I need 之后将它们解析为另一个实体,以便将它们导出到 XML 文件中。当我的规范涉及很多实体(约 6 000 个)时,我会遇到内存不足错误。

有人有解决办法吗?我没有想法......(增加堆大小不是一种选择)

@RequestMapping(method = RequestMethod.GET, value = "/cmc")
public String getXmlExport(CmcCriteria cmcCriteria, Model model) throws CmcCommonsException {

    Specification<Cmc> cmcSpec = cmcService.getSpec(cmcCriteriaResource);
    List<Cmc> cmcList = cmcRepository.findAll(cmcSpec);

    model.addAttribute("requestCmcXml", getCmcXmlListFromCmcList(cmcList));
    return "cmc/list";
}


@Override
protected final void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

    List<CmcXml> listeCmcXml = (List<CmcXml>) model.get("requestCmcXml");

    CmcXmlExport export = new CmcXmlExport();
    export.setPersonnels(listeCmcXml);
    response.setContentType(CONTENT_TYPE_XML);
    ServletOutputStream out = response.getOutputStream();
    JAXBContext context = JAXBContext.newInstance(CmcXmlExport.class);
    Marshaller marshaller = context.createMarshaller();
    marshaller.marshal(export, out);
    out.flush();

}

@XmlRootElement(name = "CMC")
public class CmcXmlExport {

    private List<CmcXml> personnels;
    [...]
}

@XmlType(propOrder = { "id", "nom", "prenom", "genre", [...] })
public class CmcXml implements Serializable {

private static final long serialVersionUID = 1L;

private int id;
private String nom;
private String prenom;
private String genre;
[...]
}

【问题讨论】:

  • “增加堆大小不是一种选择” 为什么会这样?如果您的 6000 个实体需要很大空间,它可能是唯一有效的选择。或者加载更少的数据。能否提供错误输出?
  • 我能否检查一下您是否在正确的 XML 意义上使用术语“实体”(通常由 &amp;name; 引用)并且它不是“元素”的拼写错误?我问是因为人们通常不会在数据库中保存 XML 实体。

标签: java xml spring spring-data-jpa


【解决方案1】:

尝试使用 Apache Xerces lib for Java:Official website。它鼓励为 XML 解析和处理编写更有效的代码。

这个库为您提供了处理 XML 块的方法,您必须编写一些额外的代码来解析您的实体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2011-12-03
    • 2018-06-04
    • 2014-05-10
    • 2019-11-13
    • 1970-01-01
    • 2015-06-18
    相关资源
    最近更新 更多