Из приведенного сообщения об ошибке я полагаю, myTemplate.getFilename()
возвращает classpath:myTemplate.txt
, а не myTemplate.txt
. Это объяснило бы, почему это не работает, даже если вы установите каталог шаблона в myTemplate.getFile().getParentFile()
.
Но более фундаментальная проблема заключается в том, что вы, похоже, неправильно используете API FreeMarker. Обычно объект Configuration
должен создаваться один раз в жизненном цикле приложения. Это среди прочего, потому что он содержит кэш шаблона. Если вы все равно не используете кеш шаблонов, вы можете загрузить шаблон в String
и создать Template
с помощью конструктора класса Template
. (Однако, если это #include
-s или #import
-s другие шаблоны, то для этого FreeMarker вызовет cfg.getTemplate
внутри.) Если вы хотите использовать cfg.getTemplate
(и, следовательно, кеш тоже), то, вероятно, вы следует использовать TemplateLoader
, который понимает эти имена ресурсов Spring, а затем настроить FreeMarker для использования этого (cfg.setTemplateLoader(yourTemplateLoader)
). Я не знаю, содержит ли Spring такую вещь или нет, но в целом нетрудно включить API хранилища в интерфейс TemplateLoader
. (Это, безусловно, проще и надежнее в долгосрочной перспективе, чем пытаться «обмануть» FreeMarker при загрузке шаблона со специальным setDirectoryForTemplateLoading
и тому подобным.)