2016-02-24 7 views
3

Я работаю над приложением в Java/Spark framework, и я использую механизм шаблонов 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.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 
+0

я начинаю сомневаться, что это вообще возможно, когда никто не отвечает на это ... –

ответ

1

Попробуйте это:

  1. Инициализировать экземпляр двигателя скорости. VelocityEngine x = новый 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

Я добавил код к исходному вопросу ... –