【问题标题】:How to read blob format file in thymleaf context如何在 thymeleaf 上下文中读取 blob 格式文件
【发布时间】:2016-03-18 11:06:45
【问题描述】:

我想将 thymleaf 模板存储到数据库而不是文件系统中。

因为如果我存储到文件系统中,如果我们需要运行多个应用程序节点来跨服务器分配负载,这将是一个主要问题。模板不应该很大,以便将它们存储在数据库中。

到目前为止,我使用诸如

之类的代码通过上下文中的预定义路径读取文件
FileTemplateResolver resolver = new FileTemplateResolver();
String filePath = env.getProperty("external.notification.template.dir");
resolver.setPrefix(filePath);
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setOrder(templateEngine.getTemplateResolvers().size());
resolver.setCacheable(false);
templateEngine.addTemplateResolver(resolver);

可以使用 blob 创建临时文件并从同一位置读取。但是可能有很好的方法可用。

任何人都知道读取 blob 数据的配置。

是否有使用 thymleaf 上下文读取 blob 格式文件的方法?

【问题讨论】:

  • 不要认为它是开箱即用的,但实现 TemplateResolver 可以满足您的需求并不难。
  • @M.Deinum 谢谢。你说的对。我没有找到任何与此相关的 API。所以只有创建临时文件并读取它才有可能。如果我使用数据库解决方案,它是正确/好的方法吗?
  • 不,为什么要写入文件。只需创建一个从数据库返回模板的解析器,您无需先将其写入磁盘...
  • @M.Deinum 哦。让我使用 TemplateResolver。谢谢。
  • 我认为以这种方式进行负载平衡是不正确的 :) 如果您有多个节点,则必须使用像这样的负载平衡器i.stack.imgur.com/amxhy.png

标签: java spring thymeleaf spring-annotations


【解决方案1】:

我创建了扩展TemplateResolverDbTemplateResolver 类。它有内部类,有一个从表格中获取图像数据的 db 调用。

private class DbResourceResolver implements IResourceResolver {

        @Override
        public InputStream getResourceAsStream(TemplateProcessingParameters params, String resourceName) {

            NotificationTemplate template = templateService.getNotificationTemplateByName(resourceName);
            if (template != null) {
                return new ByteArrayInputStream(template.getFileData());
            }
            return null;
        }

        @Override
        public String getName() {
            return "dbResourceResolver";
        }
    }

这将在流程方法调用时调用。

mergedMessage = templateEngine.process(fileName, ctx);

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 2017-03-07
    • 2021-01-09
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多