• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

springboot集成freemarker模板,项目打成jar包到生产环境显示找不到模板文件

武飞扬头像
懒惰的小白521
帮助1

一、问题描述

1、使用springboot集成freemarker模版后,在本地运行正常;打成jar包后到线上测试报如下错误:
学新通
2、原因:打成jar后freemarker无法使用类加载器获取jar包中的resourse目录下的templates文件

java.io.FileNotFoundException: file:/home/user/springboot.jar!/BOOT-INF/classes!/templates does not exist.

二、原始代码

本人出错的代码大概如下所示:这块代码主要是testTemplate()方法中configuration通过模板名获取模板对象而服务,所以报错也是这行代码导致线上报错。(为了简洁此块代码已做删减,保留核心部位)

public class WordUtil {
    //配置信息,代码本身写的还是很可读的,就不过多注解了
    private static Configuration configuration = null;
    // 这里注意的是利用WordUtils的类加载器动态获得模板文件的位置

    private static final String templateFolder = WordUtil.class.getResource("/templates").getPath();

    static {
        configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
        try {
            System.out.println(templateFolder);
            configuration.setDirectoryForTemplateLoading(new File(templateFolder));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static void testTemplate() throws IOException {
        Template freemarkerTemplate = configuration.getTemplate("word.ftl");   
    }
}
学新通

三、解决方案

1、前言:在网上寻找很多的方法,比如修改api,更改某些代码的设置等等都没有解决问题。
2、解决方案:注入FreeMarkerConfigurer配置类,因为freemarker模板的默认目录就在resourse下的templates目录下,使用freeMarkerConfigurer.getConfiguration().getTemplate(“word.ftl”)可直接获取到对应的模板文件

  @Autowired
  FreeMarkerConfigurer freeMarkerConfigurer;

  Template template = freeMarkerConfigurer.getConfiguration().getTemplate("word.ftl");

ps:原始代码块最后也只是获取到模板Template对象,所以使用此方法也可以实现并能成功解决bug。

四、注意点

ps:因为本人此地方是工具类,没有让spring来进行管理,所以不能在工具类中直接注入FreeMarkerConfigurer对象;所以可以注入到controller或者service类中,然后controller或者service类在调用工具类方法的时候通过实参传递过来。如工具类testTemplate()方法的参数

public static void testTemplate(FreeMarkerConfigurer freeMarkerConfigurer) throws IOException {
     Template template = freeMarkerConfigurer.getConfiguration().getTemplate("word.ftl");
}

参考链接

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgjefcj
系列文章
更多 icon
同类精品
更多 icon
继续加载