Как перезагрузить шаблоны без перезагрузки сервера?
Я работаю над приложением в среде 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 ответ
Решение
Попробуй это:
- Инициализируйте экземпляр двигателя скорости. VelocityEngine x = новый 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;
}