2016-02-24 76 views
3

我正在研究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文件class.resource.loader.classorg.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 
+0

我開始懷疑它甚至有可能,如果沒有人響應這個...... –

回答

1

試試這個:

  1. 初始化速度引擎實例。 VelocityEngine x = new VelocityEngine();
  2. 設置屬性:

    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 
    
  3. x.int();

重要的一點是,您不會在每次請求時重新初始化速度引擎。做這樣的事情,同時創造極速引擎對象:

VelocityEngine x; // instance variable 

    if(x==null) 
    { 
    x = new VelocityEngine(); 
    x.init(); 
    } 
    else 
    { 
    x; 
    } 
+0

我以前沒有任何的成功嘗試這樣做。 –

+0

對我來說這個模式運行良好。您的代碼中可能存在一些小缺陷。你可以發佈一些細節。 – devaj

+0

我已將代碼添加到原始問題中... –

相關問題