簡體   English   中英

Spring thymeleaf TemplateEngine 出現錯誤 第二次創建pdf時模板引擎已經初始化

[英]Spring thymeleaf TemplateEngine Getting error Template engine has already been initialized when creating a pdf the second time

當我從這個 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);
    }
} 

您使用了 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM