由于springboot在1.5.x版本开始不支持velocity(https://jira.spring.io/browse/SPR-13235),之后的版本若想使用要自己配置。
但是由于客观因素需要,在此简要记录我的配置方法,springboot版本以 2.1.4.RELEASE 为例。
说白了就是缺啥补啥。
1. 指定 spring-boot-starter-velocity 的 maven 配置版本
由于1.5.x后默认不支持,所以要手动指定。如下图:
2. 添加类库中删除的文件
由于有关velocity配置以及渲染的类都来源于spring-context-support.jar以及spring-webmvc.jar这两个包中。而在这两个包最新的版本中,所有有关velocity的类全都删除了,所以要手动添加相关的类文件。我这里使用4.3.x的包版本,要添加的包括
- https://github.com/spring-projects/spring-framework/tree/4.3.x/spring-context-support/src/main/java/org/springframework/ui/velocity
-
https://github.com/spring-projects/spring-framework/tree/4.3.x/spring-webmvc/src/main/java/org/springframework/web/servlet/view/velocity
以上两个路径下的文件,添加后工程目录结构如图:
然后各种依赖关系以及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 常量配置,改为自己添加该文件的路径。如下图:
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. 配置完成,写测试类,进行测试。
结果如图:
极简版(只为了velocity测试)的demo已经上传 https://github.com/LiangliangW/velocity
,可以自行取需。
提醒:这样强行适配可能产生一定性能问题,如并发量较低,请结合自身业务取用,生产环境一定提前压测。最佳建议还是使用其他更新的模板。