如何在不重新加载服务器的情况下重新加载模板?
How to reload templates without reloading server?
我正在 Java/Spark 框架中开发一个应用程序,我正在使用 Apache Velocity 模板引擎。我的问题是,每次我更改模板中的任何内容时,我都必须重新加载整个服务器。有没有办法启用某种热插拔功能,以便在不重新加载整个服务器的情况下在模板上工作?
private final VelocityEngine velocityEngine;
public VelocityTemplateEngine() {
Properties properties = new Properties();
properties.setProperty("resource.loader", "class");
properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
properties.setProperty("class.resource.loader.cache", "true");
properties.setProperty("class.resource.loader.modificationCheckInterval", "2");
properties.setProperty("velocimacro.library.autoreload", "true");
properties.setProperty("velocimacro.permissions.allow.inline.to.replace.global", "true");
velocityEngine = new org.apache.velocity.app.VelocityEngine(properties);
//velocityEngine.init(); <-- This bit of code does not change anything when uncommented...
}
解法:
通过将 resource.loader 更改为 file 和 class.resource.loader.class 到 org.apache.velocity.runtime.resource.loader.FileResourceLoader
properties.setProperty("resource.loader", "file");
properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
properties.setProperty("file.resource.loader.path", root + "/src/main/resources/"); // "root" points to the app folder
properties.setProperty("class.resource.loader.cache", "true"); // Enable cache
properties.setProperty("class.resource.loader.modificationCheckInterval", "2"); // Check for new files every 2 seconds
试试这个:
- 初始化速度引擎实例。 VelocityEngine x = new VelocityEngine();
设置属性:
file.resource.loader.class= FileResourceLoader classname
file.resource.loader.path= template location
file.resource.loader.cache= true
file.resource.loader.modificationCheckInterval= duration in which you want to reload the templates
- x.int();
这里要点是您不会在每次请求时都再次初始化速度引擎。在创建速度引擎对象时做这样的事情:
VelocityEngine x; // instance variable
if(x==null)
{
x = new VelocityEngine();
x.init();
}
else
{
x;
}
我正在 Java/Spark 框架中开发一个应用程序,我正在使用 Apache Velocity 模板引擎。我的问题是,每次我更改模板中的任何内容时,我都必须重新加载整个服务器。有没有办法启用某种热插拔功能,以便在不重新加载整个服务器的情况下在模板上工作?
private final VelocityEngine velocityEngine;
public VelocityTemplateEngine() {
Properties properties = new Properties();
properties.setProperty("resource.loader", "class");
properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
properties.setProperty("class.resource.loader.cache", "true");
properties.setProperty("class.resource.loader.modificationCheckInterval", "2");
properties.setProperty("velocimacro.library.autoreload", "true");
properties.setProperty("velocimacro.permissions.allow.inline.to.replace.global", "true");
velocityEngine = new org.apache.velocity.app.VelocityEngine(properties);
//velocityEngine.init(); <-- This bit of code does not change anything when uncommented...
}
解法:
通过将 resource.loader 更改为 file 和 class.resource.loader.class 到 org.apache.velocity.runtime.resource.loader.FileResourceLoader
properties.setProperty("resource.loader", "file");
properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
properties.setProperty("file.resource.loader.path", root + "/src/main/resources/"); // "root" points to the app folder
properties.setProperty("class.resource.loader.cache", "true"); // Enable cache
properties.setProperty("class.resource.loader.modificationCheckInterval", "2"); // Check for new files every 2 seconds
试试这个:
- 初始化速度引擎实例。 VelocityEngine x = new VelocityEngine();
设置属性:
file.resource.loader.class= FileResourceLoader classname file.resource.loader.path= template location file.resource.loader.cache= true file.resource.loader.modificationCheckInterval= duration in which you want to reload the templates
- x.int();
这里要点是您不会在每次请求时都再次初始化速度引擎。在创建速度引擎对象时做这样的事情:
VelocityEngine x; // instance variable
if(x==null)
{
x = new VelocityEngine();
x.init();
}
else
{
x;
}