gpt4 book ai didi

java - 在 Java 中处理 String Freemarker 语法的最有效方法是什么

转载 作者:搜寻专家 更新时间:2023-11-01 03:37:14 24 4
gpt4 key购买 nike

这是我们的用例。我们正在从数据库中加载 freemarker 语法并对其进行处理。我们正在处理近一百万条记录。一切正常。但是当我分析应用程序时,我发现我的 freemarker 处理方法是瓶颈,它花费了大部分时间。阅读了 freemarker 文档后,我得到了一些关于我的问题的指示。每次我进行处理时,我都会创建新的 freemarker.template.Template 对象(创建它似乎很昂贵)。我找不到这样做的正确/更有效的方法。

public FTLTemplateEngine() {
cfg = new Configuration();
}



public String process(String template, Map<String, Object> input) throws IOException, TemplateException {
String rc = null;
final Writer out = new StringWriter();
try {
final Template temp =new Template("TemporaryTemplate", new StringReader(template), cfg);
temp.process(input, out);
}
catch (InvalidReferenceException e) {
log.error("Unable to process FTL - " + template);
throw new InvalidReferenceException("FTL expression has evaluated to null or it refers to something that doesn't exist. - " + template, Environment.getCurrentEnvironment());
}
catch (TemplateException e) {
log.error("Unable to process FTL - " + template);
throw new TemplateException("Unable to process FTL - " + template, e, Environment.getCurrentEnvironment());
}
catch (IOException e) {
log.error("Unable to process FTL - " + template);
throw new IOException("Unable to process FTL - " + template);
}
rc = out.toString();
out.close();
return rc.trim();
}

看看每次需要解析Freemarker时调用的process方法。在这个方法中,我们每次都创建新的模板对象。有没有办法避免这种情况?

最佳答案

AFAIR 你通常不会直接调用Template 构造函数,而是使用Configuration 实例来调用(参见Get the templateTemplate loading)。 Configuration 对象也使用 caching ,这可能会有所帮助。您可能需要编写自己的 TemplateLoader以便从数据库加载您的 FreeMarker 模板。

关于java - 在 Java 中处理 String Freemarker 语法的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27499594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com