Freemarker 加载字符串模板

2017-08-30  本文已影响253人  else05

平时使用模板都是加载模板文件,这次处理的文件是保存在数据库的字符串。
项目使用的是spring-boot和freemarker整合

JDK  : 1.8
框架 : Spring boot
模板 : Freemarker
<!--整合freemarker-->
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  1. 在类中注入模板配置
@Autowired
@Qualifier("freeMarkerConfiguration")
private Configuration       freemarkerConf;
  1. 核心代码
String templateContent="这是一个字符串加载的模板  ${name}";
// 新建一个字符串的模板加载器
StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
// 设置模板 ,其中
stringTemplateLoader.putTemplate("myTemplate", templateContent);
freemarkerConf.setTemplateLoader(stringTemplateLoader);

freemarkerConf.clearTemplateCache();
Template   template = freemarkerConf.getTemplate("myTemplate", "utf-8");

    private Template createTemplate(String name, String templateContent) throws IOException {
        Template template = freemarkerConf.getTemplate(name, "utf-8");

        if (template != null) {
            return template;
        }
        synchronized (this){ // 以下操作不是线程安全,要加上同步
            // 获取模板加载器
            TemplateLoader templateLoader = freemarkerConf.getTemplateLoader();
            if(templateLoader != null && templateLoader instanceof StringTemplateLoader){
                // 如果加载器已经是字符串加载器,则在原来的加载器上put一个新的模板
                ((StringTemplateLoader) templateLoader).putTemplate(name, templateContent);
                freemarkerConf.setTemplateLoader(templateLoader);
            }else{
                // 如果原来的模板加载器不是字符串的(默认是文件加载器),则新建
                StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
                stringTemplateLoader.putTemplate(name, templateContent);
                freemarkerConf.setTemplateLoader(stringTemplateLoader);
            }
            // 这里要清一下缓存,不然下面可能会获取不到模板
            freemarkerConf.clearTemplateCache();
            template = freemarkerConf.getTemplate(name, "utf-8");

            return template;
        }
    }

注意:

1. 设置好模板后要清一下缓存,否则你新保存的模板可能会获取不到!!!

2. 设置加载器为字符加载器,意味着就不能使用文件的方式读取模板了 !!!!

上一篇下一篇

猜你喜欢

热点阅读