мы не хотим, чтобы Thymeleaf загружал HTML-шаблоны, используя ClassPathLoader
или аналогичные, но FileTemplateResolver
вместо
у нас есть префикс, установленный в app.properties
spring.thymeleaf.prefix=file:///tmp/templates/
, которые мы подаем на TemplateResolver
и TemplateEngine
@Configuration
public class ThymeleafConfiguration {
@Value("${spring.thymeleaf.prefix}")
private String prefix;
private static final Logger LOG = LoggerFactory.getLogger(ThymeleafConfiguration.class);
@Bean
public FileTemplateResolver fileTemplateResolver() throws FileNotFoundException {
FileTemplateResolver fileTemplateResolver = new FileTemplateResolver();
fileTemplateResolver.setPrefix(getPath());
fileTemplateResolver.setTemplateMode("LEGACYHTML5");
fileTemplateResolver.setSuffix(".html");
fileTemplateResolver.setCharacterEncoding("UTF-8");
fileTemplateResolver.setOrder(1);
return fileTemplateResolver;
}
public String getPath() throws FileNotFoundException {
LOG.info("getPath, prefix set to : {}", prefix);
File templatesFolder = new File(prefix);
if (!templatesFolder.isDirectory() || templatesFolder.list() == null || templatesFolder.list().length == 0) {
LOG.error("Templates cannot be found in path {}", prefix);
LOG.error("templatesFolder {}", templatesFolder.toString()); // !!!! code falls here .
// throw new FileNotFoundException("Templates cannot be found!");
}
return templatesFolder.getAbsolutePath() + File.separatorChar;
}
@Bean
public TemplateEngine templateEngine() throws FileNotFoundException {
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.getTemplateResolvers().clear();
templateEngine.setTemplateResolver(fileTemplateResolver());
return templateEngine;
}
}
Кажется, это работает, странно ..
Но я в замешательстве, потому что при запуске приложения, создании компонента, код систематически падает в методе проверки в getPath
.
это нормально?
Спасибо