Загрузить шаблоны FreeMarker из базы данных

Я хотел бы сохранить свои шаблоны FreeMarker в таблице базы данных, которая выглядит примерно так:

template_name | template_content
---------------------------------
hello         |Hello ${user}
goodbye       |So long ${user}

Когда получен запрос для шаблона с конкретным именем, это должно привести к выполнению запроса , который загружает соответствующий контент шаблона. Содержимое этого шаблона вместе с моделью данных (значение переменной 'user' в приведенных выше примерах) затем следует передать FreeMarker.

Однако, FreeMarker API , кажется, предполагает, что каждое имя шаблона соответствует файлу с тем же именем в определенном каталоге файловой системы. Можно ли как-нибудь легко загрузить свои шаблоны из БД вместо файловой системы?

РЕДАКТИРОВАТЬ: Я должен был упомянуть, что хотел бы иметь возможность добавлять шаблоны в базу данных. пока приложение работает, поэтому я не могу просто загрузить все шаблоны при запуске в новый StringTemplateLoader (как предлагается ниже).

21
задан Dónal 20 August 2019 в 12:40
поделиться

2 ответа

Мы используем StringTemplateLoader для загрузки нашего tempates, который мы получили от дб (как предложенный Dan Vinton)

, Вот пример:

StringTemplateLoader stringLoader = new StringTemplateLoader();
String firstTemplate = "firstTemplate";
stringLoader.putTemplate(firstTemplate, freemarkerTemplate);
// It's possible to add more than one template (they might include each other)
// String secondTemplate = "<#include \"greetTemplate\"><@greet/> World!";
// stringLoader.putTemplate("greetTemplate", secondTemplate);
Configuration cfg = new Configuration();
cfg.setTemplateLoader(stringLoader);
Template template = cfg.getTemplate(firstTemplate);

Редактирование Вы не должны загружать все шаблоны при запуске. Каждый раз, когда мы получим доступ к шаблону, мы выберем его от DB и загрузим его через StringLoader, и путем вызова template.process () мы генерируем (в нашем случае) вывод XML.

28
ответ дан Ulf Lindback 20 August 2019 в 22:40
поделиться

Несколько путей:

  • Создают новую реализацию TemplateLoader, чтобы загрузить шаблоны из базы данных и передать его Вашему Конфигурация экземпляр с помощью setTemplateLoader() до загрузки любых шаблонов.

  • Использование StringTemplateLoader, который Вы настраиваете от своей базы данных, когда Ваше приложение запускается. Добавьте его к конфигурации как выше.

Редактирование в свете редактирования корреспондента, Ваша собственная реализация TemplateLoader похожа на способ пойти. Проверьте Javadoc здесь , это - простой небольшой интерфейс только с четырьмя методами, и его поведение хорошо документируется.

18
ответ дан Dan Vinton 20 August 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: