當我從這個 html 檔案創建 pdf 時,一切都在第一次完美運行并將 pdf 創建到我的本地機器。但是當我再次創建它時,它回傳此錯誤“模板引擎已經被初始化(可能是因為它已經被執行或者已經從它請求了一個完全構建的配置物件。在這種狀態下,不允許對其配置進行修改。 " 如果我??重新啟動本地應用程式服務器,它會在第一次再次運行。我還嘗試使用 templateEngine.clearTemplateCache() 清除快取。
看起來當我第二次使用快取的模板決議器運行它時。
@Service
public class LetterService {
@Autowired
private TemplateEngine templateEngine;
private String processPdfTemplate(Map<String, Object> variables) {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateEngine.setTemplateResolver(templateResolver);
Context context = new Context();
context.setVariables(variables);
context.setLocale(Locale.getDefault());
return templateEngine.process("index", context);
}
}
uj5u.com熱心網友回復:
您使用了 Spring Bean 中的 TemplateEngine。它不是執行緒安全的,不能兩次重新設定同一個物件。改用本地變數
private String processPdfTemplate(Map<String, Object> variables) {
TemplateEngine templateEngine = new SpringTemplateEngine();
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateEngine.setTemplateResolver(templateResolver);
Context context = new Context();
context.setVariables(variables);
context.setLocale(Locale.getDefault());
return templateEngine.process("index", context);
}
或者如果你想為同一個 Filepath 快取 TemplateEngine,你可以用 ConcurrentHashMap 來快取它。還有一種替代方法是使用您自己的 TemplateResolver 創建您自己的 TemplateEngine Bean。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/491623.html
