SpringBoot velocity 模板配置绝对路径的资源路径

velocity 配置模板路径是class path 下面相对的。

如果我们再boot 生产环境下,对应模板路径在class path 下那么将一并打包到jar 中。这样的情况我们就没有办法随时修改模板文件。这样对于一个产品维护是相当不方便的。那么就需要配置到一个jar 包的绝对路径中。这样我们可以随时修改,并且可以随时生效。

1.配置boot application.properties

spring.velocity.charset=UTF-8
spring.velocity.content-type=text/html
spring.velocity.properties.input.encoding=UTF-8
spring.velocity.properties.output.encoding=UTF-8
spring.velocity.properties.file.resource.loader.class=com.yoke.common.FileResourceLoader
spring.velocity.expose-request-attributes=true
spring.velocity.expose-session-attributes=true
spring.velocity.toolbox-config-location=toolbox.xml
spring.velocity.enabled=true
spring.velocity.resource-loader-path=/boot/vm/
spring.velocity.suffix=.vm

其中
spring.velocity.properties.file.resource.loader.class 属性是修改我们模板加载资源类(在这个类中我们需要进行自定义)

spring.velocity.resource-loader-path 是配置我们资源所在的绝对路径

com.yoke.common.FileResourceLoader 类的代码如下:

package com.yoke.common;
/**
 * Created by jiangzeyin on 2017/1/5.
 */

import com.yoke.system.SystemBean;
import com.yoke.system.log.SystemLog;
import org.apache.commons.collections.ExtendedProperties;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.runtime.resource.loader.ResourceLoader;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * @author jiangzeyin
 * @create 2017 01 05 18:30
 */
public class FileResourceLoader extends ResourceLoader {
    Map<String, Long> fileLastModified = new HashMap<>();

    @Override
    public void init(ExtendedProperties configuration) {

    }

    @Override
    public InputStream getResourceStream(String source) throws ResourceNotFoundException {
        File file = null;
        try {
            file = getResourceFile(source);
            return new FileInputStream(file);
        } catch (FileNotFoundException e) {
            SystemLog.LOG().info("FileNotFoundException:" + source + "  " + file.getPath());
            return this.getClass().getResourceAsStream(source);
        } finally {
            if (file != null)
                fileLastModified.put(source, file.lastModified());
        }
    }

    @Override
    public boolean isSourceModified(Resource resource) {
        long lastModified = resource.getLastModified();
        File file = getResourceFile(resource.getName());
        return lastModified != file.lastModified();
    }

    @Override
    public long getLastModified(Resource resource) {
        return fileLastModified.get(resource.getName());
    }

    private File getResourceFile(String name) {
        return new File(String.format("%s/%s", SystemBean.getInstance().VelocityPath, name));
    }
}

这个类主要是去加载对应资源,velocity 默认是对资源有缓存的,也就是加载一次资源后,第二次直接读缓存。这样即使我们改了模板内容实际显示还是没有变更前的。这里我们使用map 对模板资源文件的最后一次修改时间进行一次缓存。每一次读取资源是先判断最后一次修改时间是否变更。

其中60行 SystemBean.getInstance().VelocityPath 是对 application.properties 中的spring.velocity.resource-loader-path 属性值进行读取。

时间: 2024-12-09 23:13:19

SpringBoot velocity 模板配置绝对路径的资源路径的相关文章

SpringBoot中如何自定义静态资源路径及映射

差不多写完一个日志模板了, 明天集成到主程序,测试一下, 下周一就可以上线了. 今天遇到最后一个问题, 在将SPRINGBOOT与DJANGO,UWSGI,NGINX作集成时, SPRINGBOOT的静态资源目录不能像测试环境一样,直接用static下面的js,css,img等目录. 必须在nginx下作一下location,定位到springboot专属的目录位置. 这时,就涉及自定义静态资源路径及映射. 举例: 如果我想在thymeleaf中用 <link rel="styleshee

velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools

通常velocity是配合spring mvc之类的框架在web中使用,但velocity本身其实对运行环境没有过多的限制,在单独的java application中也可以独立使用,下面演示了利用velocity模板引擎生成 『每日发货单』邮件内容: 一.先定义邮件内容模板:mail-template.vm <string>用户,您好:</string> <h2>以下是 $date.format('yyyy-MM-dd',$model.deliverDate,$conv

JAVA velocity模板引擎使用实例_JSP编程

velocity使用1.7版本. 在win7下使用intelliJ IDEA建立一基于tomcat的web app项目,命名为todo_web,设置path为/todo,导入velocity相关jar包.只导入velocity-1.7.jar这个包可能会报错,根据提示再导入velocity自带的其他包. 项目结构如下: 测试Tomcat index.jsp内容如下: 复制代码 代码如下: <%-- Created by IntelliJ IDEA. --%><%@ page conten

【SpringBoot】SpringBoot核心-外部配置

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] Spring Boot允许使用properties文件.yaml文件或者命令行参数作为外部配置. 命令行参数配置 Spring Boot可以是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行: java -jar *.jar 如果你的Tomcat的端口和你其他的端口起冲突了, 还可以通过以下命令修改Tomcat端口号: java -jar *.jar --server

如何使用 velocity 模板引擎开发网站

模板 开发网站-velocity模板引擎">基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI(界面)部分,然后由程序员在其上加入代码显示逻辑(比如循环,判断显示数据结果).也就是通常的 jsp 页面制作,当然这部分可以由美工完成模板,然后由 jsp 工程师再继续以它为原型创建相应的 jsp 页面. 2:功能确定后,由美工设计网页的UI(界面)

用Apache Velocity模板引擎速造网站

apache|模板 基于Java的网站开发,很多人都采用JSP作为前端网页制作的技术,尤其是在国内.这种技术通常会存在一些问题,可以通过简单地分析网站开发过程来看看这些问题.通常网站开发采用以下两种方式: ◆ 网站功能确定后,由美工设计网页的UI(界面)部分,然后由程序员在其上加入代码显示逻辑(比如循环.判断显示数据结果).这就是通常的JSP页面制作,当然这部分可以由美工完成模板,然后由JSP工程师以它为原型创建相应的JSP页面. ◆ 网站功能确定后,由美工设计网页的UI(界面)部分,然后由网页

velocity模板引擎学习(3)-异常处理

按上回继续,前面写过一篇Spring MVC下的异常处理.及Spring MVC下的ajax异常处理,今天看下换成velocity模板引擎后,如何处理异常页面: 一.404错误.500错误 1 <error-page> 2 <error-code>404</error-code> 3 <location>/nopage.do</location> 4 </error-page> 5 6 <error-page> 7 <

java ee-tomcat:配置servlet程序的虚拟路径映射

问题描述 tomcat:配置servlet程序的虚拟路径映射 如题. 我写了个servlet测试程序,然后想要把它映射到一个虚拟路径,比如**localhost/index.html**,然后我用浏览器访问这个路径时,调用我的那个servlet程序. 我用eclipse for java ee向导创建的可以访问,但是访问的只能是这个**servlet类名**,我想改servlet的映射路径,该怎么设置,(_已经把项目目录设置到主机根目录下了_) 解决方案 在web.xml里配置 testserv

jenkins搭建持续集成环境,配置SVN支持SVN中文路径不,怎么老是报错

问题描述 jenkins搭建持续集成环境,配置SVN支持SVN中文路径不,怎么老是报错 jenkins搭建持续集成环境,配置SVN支持SVN中文路径不,怎么老是报错 解决方案 一样的问题,等待大神解答.................................................