博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(springboot)freemarker(二)
阅读量:5298 次
发布时间:2019-06-14

本文共 4798 字,大约阅读时间需要 15 分钟。

集成freemarker,很简单很快捷。

org.springframework.boot
spring-boot-starter-freemarker

注意注意,这里我是没有写版本号的,原因看第一篇,小伙伴们注意下,可以通过集成springboo为父模块,这样就可以不用添加版本号,也可以通过maven的公共版本管理的方法,这样可以不用添加版本号,只需要在管理的地方统一管理就好了。

我这里用的maven分模块开发,在父模块中添加了。最后就是自己手动搜索包,然后找到对应的版本号,添加上去吧。这里提下

org.springframework.boot
spring-boot-dependencies
1.4.1.RELEASE
pom
import

记住确认下包有没有进来。

添加完freemarker的依赖后,添加模板页,进行测试,可以运行第一章的最后一个hello例子,试试。

不需要进行任何的配置,可以查看下他源代码试试。因为前几天扩展他freemarker的配置时有看到一点,顺便说下咯。

首先,为什么不需要任何的配置,只要在resources下添加templates,他就能默认匹配到对应的模板页,这是主要的问题。

springboot,他有默认自带的配置文件,在这个配置文件中他集成了常用框架所需要的常用配置,所以我们只需要根据他的配置做开发就好,或者是在resources下添加application.properties 文件,然后设置对应项就好,这个默认配置文件我以前在jar包找到过,这阵子找了很久都没找到,但是没事http://www.tuicool.com/articles/veUjQba 可以去这里看下他默认配置。

这是第一步,他会去读取application.properties文件和默认配置文件,然后加载对应的配置到bean中。

freemarker在springboot中的配置bean的位置

自动配置包

 

所以他默认会去匹配templates文件夹下以.ftl 结尾的bean.当然还有其他的配置项在其他的地方。

到这里freemarker 的集成基本入门就到这里。

 

接下会追加一个前几天写的freemarker的扩展配置。

由于springboot中并没有集成freemarker的自动导入和自动包含属性,所以只能自己加载进入相关的配置,这里贴写代码和大概的解释下。

首先在配置文件中加入相关配置

# 如果auto_import和auto_include 空值的话请赋值 _ 下划线auto_import = test.ftl as t;test1.ftl as t1auto_include = test.ftl

为什么下划线呢,因为空值后面的注入会报错,所以就硬性规则为下划线,当时做的急,就这样了。

一个自定义异常类,用于捕获自定义加载时的抛出异常,其他几个异常类就不贴了,不然太多了,可以简单的实现下。

public class ConfigException extends BaseException implements RetCodeSupport {    private final static String code = RetCode.FAIL_CONFIG;    public ConfigException(String message) {        super(message);    }    public ConfigException(String message, Throwable throwable) {        super(message,message);    }    @Override    public String getRetCode() {        return code;    }}

重点是freemarker的加载bean,先大概的的看下,后面解释下。

/** * Freemarer 配置 * 增加自动注入和包含配置 * Created by 灰灰 on 2017/7/1. */@org.springframework.context.annotation.Configurationpublic class FreemarkerConfig {    private static Logger log = LoggerFactory.getLogger(FreemarkerConfig.class);    @Bean    public FreeMarkerConfigurer freeMarkerConfigurer(@Value("${auto_import}") String autoImport,@Value("${auto_include}") String autoInclude) {        FreeMarkerConfigurer config = new FreeMarkerConfigurer();        writerProperties(config);        Configuration configuration = null;        try {            configuration = config.createConfiguration();        } catch (IOException e) {            throw new ConfigException("freemarker配置bean,IO异常",e);        } catch (TemplateException e) {            throw new ConfigException("freemarker配置bean异常",e);        }        setAutoImport(autoImport,configuration);        setAutoInclude(autoInclude,configuration);        config.setConfiguration(configuration);        return config;    }    @Autowired    private FreeMarkerProperties properties;    private void writerProperties(FreeMarkerConfigurer config) {        config.setTemplateLoaderPaths(this.properties.getTemplateLoaderPath());        config.setPreferFileSystemAccess(this.properties.isPreferFileSystemAccess());        config.setDefaultEncoding(this.properties.getCharsetName());        Properties settings = new Properties();        settings.putAll(this.properties.getSettings());        config.setFreemarkerSettings(settings);    }    private void setAutoImport(String autoImport,Configuration configuration) {        if("_".equals(autoImport.trim())) {            return;        }        String[] imports = autoImport.split(";");        Map
importMap = new HashMap
(imports.length); for (String s : imports) { String[] keyValue = s.split("as"); if (keyValue.length != 2) { log.error("freemarker配置auto_import格式不正确 "); throw new ConfigException("freemarker配置auto_import格式不正确"); } importMap.put(keyValue[1].trim(),keyValue[0].trim()); } configuration.setAutoImports(importMap); } private void setAutoInclude(final String autoInclude,Configuration configuration) { if ("_".equals(autoInclude.trim())) { return; } String[] includes = autoInclude.split(";"); for (String s : includes) { System.out.println(s); } List list = new ArrayList
(Arrays.asList(includes)); configuration.setAutoIncludes(list); }}

@Configuration 本来是这样的注解的,但是用于下面有freemarker的同名类,所以这里得这样写了。

这里首先注入配置文件里需要导入和包含的模板路径,然后对模板路径做相对于的格式化,取出对应的信息,然后填充到集合中。通过注入获取到springboot注入的基本信息,然后把这些配置信息都填充的FreeMarkerConfigurer 里,返回return就好了,这里用到了@bean,他会交给spring框架去管理。

大概就这样子。

 

转载于:https://www.cnblogs.com/xiaohuihui96/p/7115647.html

你可能感兴趣的文章
环套树
查看>>
中英文混合字符串长度
查看>>
[转]Repeat Page Header on each Page for reports SSRS
查看>>
Spring中事务传播行为
查看>>
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2734: 国家排序
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
Notepad++ 16进制编辑功能
查看>>
Caffe: Cannot create Cublas handle. Cublas won't be available
查看>>
Linux 下 LXD 容器搭建 Hadoop 集群
查看>>
mysql describe
查看>>
Hello博客园
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
Android基础入门教程——8.1.2 Android中的13种Drawable
查看>>
C语言作业3
查看>>
.Net Core中的通用主机(二)——托管服务
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
koogra--Excel文件读取利器
查看>>
ASP.NET 使用ajaxupload.js插件出现上传较大文件失败的解决方法
查看>>