Как перезагрузить шаблоны без перезагрузки сервера?

Я работаю над приложением в среде 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

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;
   }
Другие вопросы по тегам