springboot1.5.x 版本后使用 velocity 模板

由于springboot在1.5.x版本开始不支持velocity(https://jira.spring.io/browse/SPR-13235),之后的版本若想使用要自己配置。

image.png

但是由于客观因素需要,在此简要记录我的配置方法,springboot版本以 2.1.4.RELEASE 为例。
说白了就是缺啥补啥。

1. 指定 spring-boot-starter-velocity 的 maven 配置版本

由于1.5.x后默认不支持,所以要手动指定。如下图:


image.png

2. 添加类库中删除的文件

由于有关velocity配置以及渲染的类都来源于spring-context-support.jar以及spring-webmvc.jar这两个包中。而在这两个包最新的版本中,所有有关velocity的类全都删除了,所以要手动添加相关的类文件。我这里使用4.3.x的包版本,要添加的包括

  1. https://github.com/spring-projects/spring-framework/tree/4.3.x/spring-context-support/src/main/java/org/springframework/ui/velocity
  2. https://github.com/spring-projects/spring-framework/tree/4.3.x/spring-webmvc/src/main/java/org/springframework/web/servlet/view/velocity
    以上两个路径下的文件,添加后工程目录结构如图:
    image.png

    然后各种依赖关系以及package的路径梳理清楚

3. 添加spring.vm并更改路径

在 https://github.com/spring-projects/spring-framework/tree/4.3.x/spring-webmvc/src/main/resources/org/springframework/web/servlet/view/velocity
路径下有一个 spring.vm 的模板文件,由于我们加入的类中启动用到了这个,所以需要添加到工程中(其实改一下类文件不要用到也行,但是懒得改了,加进来就好了)。我添加到了 /resources/templates/ 目录下。
添加后要注意修改 VelocityConfigurer 类中的 SPRING_MACRO_LIBRARY 常量配置,改为自己添加该文件的路径。如下图:

image.png

4. 添加自己的 velocity 相关配置

自定义 VelocityConfigurer 和 VelocityViewResolver 并添加为 bean。具体的配置代码如下:

@Configuration
public class MyVelocityConfig extends WebMvcConfigurerAdapter {
    //配置 velocity bean
    @SuppressWarnings("deprecation")
    @Bean
    public VelocityConfigurer velocityConfigurer(ApplicationContext context) {
        VelocityConfigurer config = new VelocityConfigurer();
        Properties properties = new Properties();
        properties.put("input.encoding", "UTF-8");
        properties.put("output.encoding", "UTF-8");
        config.setVelocityProperties(properties);
        return config;
    }

    //配置 velocity 视图解析器
    @SuppressWarnings("deprecation")
    @Bean
    public VelocityViewResolver velocityResolver() {
        VelocityViewResolver resolver = new VelocityViewResolver();
        resolver.setCache(false);
        resolver.setPrefix("/templates/");
        resolver.setSuffix(".vm");
        resolver.setContentType("text/html;charset=UTF-8");
        resolver.setExposeSpringMacroHelpers(true);
        resolver.setExposeRequestAttributes(true);
        //设置RequestContext在视图页面中的变量名,以便使用${request}获取
        resolver.setRequestContextAttribute("request");
        return resolver;
    }
}

也可以将配置写在专门的配置文件中,用 setConfigLocation 的方式引入。

5. 配置完成,写测试类,进行测试。

结果如图:


image.png

极简版(只为了velocity测试)的demo已经上传 https://github.com/LiangliangW/velocity
,可以自行取需。

提醒:这样强行适配可能产生一定性能问题,如并发量较低,请结合自身业务取用,生产环境一定提前压测。最佳建议还是使用其他更新的模板。

你可能感兴趣的:(springboot1.5.x 版本后使用 velocity 模板)