有没有办法让vm文件中的更改自动反映,而无需每次都重新启动服务器。我现在处于开发阶段,我还有很多工作要做。我是速度模板的新手,因此如果有人可以提出相同的方法,它将非常有用。我尝试使用以下属性,但它不起作用。我正在使用tomcat服务器。
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
velocimacro.library.autoreload=true
class.resource.loader.cache=false
velocimacro.permissions.allow.inline.to.replace.global=true
</value>
</property>
</bean>
答案 0 :(得分:1)
如果我的理解是正确的,那么您正尝试在服务器上热部署速度模板(vm扩展名)。 如果我们在documentation引用,您应该选择&#34;文件&#34;导向属性。
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=file
file.resource.loader.class=org.apache.velocity.runtime.resource.loader.FileResourceLoader
velocimacro.library.autoreload=true
file.resource.loader.cache=true
file.resource.loader.path=/WEB-INF/views
velocimacro.permissions.allow.inline.to.replace.global=true
file.resource.loader.modificationCheckInterval=2
</value>
</property>
</bean>
确保您的观看路径正确(file.resource.loader.path
)。我添加了file.resource.loader.modificationCheckInterval
,因为在缓存模板时,您应该给出两次检查之间的秒数。
答案 1 :(得分:0)
你可以通过覆盖Velocity的FileResourceLoader类来完成你的FileResourceLoader,这个类将在速度配置中连接WEB_APP_ROOT路径和路径项:
public class WebAppFileResourceLoader extends FileResourceLoader {
private Logger log= LoggerFactory.getLogger(WebAppFileResourceLoader.class);
@Override
public void init(ExtendedProperties configuration) {
String webAppRootPath= (String) this.rsvc.getApplicationAttribute(WEB_APP_ROOT);
if (webAppRootPath!=null) {
Vector<String> pathsVector = configuration.getVector("path");
Vector<String> tempVector = new Vector<String>(pathsVector.size());
for (String path : pathsVector) {
log.debug("path:{}", path);
tempVector.add(webAppRootPath + File.separator + path);
}
configuration.clearProperty("path");
for (String path : tempVector) {
configuration.addProperty("path", path);
}
}
super.init(configuration);
}
如何获取WEB_APP_ROOT变量,我们可以在速度引擎初始化时设置它:
public class SpringVelocityEngineFactoryBean extends VelocityEngineFactory
implements FactoryBean<VelocityEngine>, InitializingBean, ResourceLoaderAware,ServletContextAware {
private VelocityEngine velocityEngine;
private ServletContext servletContext;
private Logger log= LoggerFactory.getLogger(SpringVelocityEngineFactoryBean.class);
@Override
protected VelocityEngine newVelocityEngine() throws IOException, VelocityException {
//inject servletContext to velocity runtime's applicationAttribute
VelocityEngine velocityEngine= new VelocityEngine();
velocityEngine.setApplicationAttribute(ServletContext.class.getName(), this.servletContext);
log.debug("webappRoot:{}",this.servletContext.getRealPath(""));
velocityEngine.setApplicationAttribute(WEB_APP_ROOT,this.servletContext.getRealPath(""));
return velocityEngine;
}
....