Java 弹簧靴&x2B;ThymileAF-多模板解析程序,可回退到默认值

Java 弹簧靴&x2B;ThymileAF-多模板解析程序,可回退到默认值,java,spring-boot,thymeleaf,Java,Spring Boot,Thymeleaf,我正在尝试在我的Spring Boot应用程序中添加对带有Thymeleaf模板的电子邮件的支持。只要我只使用存储为.html文件的模板,它就可以正常工作。我想做的是添加对使用用户配置的模板“覆盖”这些文件的支持。所以,若数据库中存在模板,就使用它。否则,请尝试使用文件中的一个 我的配置如下所示: @Configuration public class ThymeleafConfig { @Bean public SpringTemplateEngine springTempl

我正在尝试在我的Spring Boot应用程序中添加对带有Thymeleaf模板的电子邮件的支持。只要我只使用存储为
.html
文件的模板,它就可以正常工作。我想做的是添加对使用用户配置的模板“覆盖”这些文件的支持。所以,若数据库中存在模板,就使用它。否则,请尝试使用文件中的一个

我的配置如下所示:

@Configuration
public class ThymeleafConfig {

    @Bean
    public SpringTemplateEngine springTemplateEngine(DatabaseTemplateResolver databaseTemplateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        databaseTemplateResolver.setTemplateMode(TemplateMode.HTML);
        templateEngine.addTemplateResolver(databaseTemplateResolver);
        return templateEngine;
    }

    @Bean
    public SpringResourceTemplateResolver htmlTemplateResolver() {
        SpringResourceTemplateResolver emailTemplateResolver = new SpringResourceTemplateResolver();
        emailTemplateResolver.setPrefix("/templates/");
        emailTemplateResolver.setSuffix(".html");
        emailTemplateResolver.setTemplateMode(TemplateMode.HTML);
        emailTemplateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
        return emailTemplateResolver;
    }

}
和数据库解析器:

@RequiredArgsConstructor
@Component
public class DatabaseTemplateResolver extends StringTemplateResolver {

    @Qualifier("htmlTemplateResolver")
    private final SpringResourceTemplateResolver htmlTemplateResolver;

    @Override
    public ITemplateResource computeTemplateResource(IEngineConfiguration configuration, String ownerTemplate, String templateName, Map<String, Object> templateResolutionAttributes) {
        model.runInTransaction(tx -> {
            Optional<Template> template = // load template from DB;

            if (template.isPresent()) {
                return super.computeTemplateResource(configuration, ownerTemplate, template.get().getContent(), templateResolutionAttributes);
            } else {
                return htmlTemplateResolver.resolveTemplate(configuration, ownerTemplate, templateName, templateResolutionAttributes);
            }
        }, TransactionDescriptor.asSystemUser());

        return null;
    }

}

有人知道我做错了什么吗?

我希望你没事,你看到这个答案了吗


我想这是因为您设置了前缀或后缀。

您好,谢谢。。。这是对前缀的错误配置。多么愚蠢的错误。。。花了很多时间调试这个。
[THYMELEAF][task-2] Exception processing template "email-notification": Error resolving template [email-notification], template might not exist or might not be accessible by any of the configured Template Resolvers
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [email-notification], template might not exist or might not be accessible by any of the configured Template Resolvers
    at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869)
    at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:607)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1059)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1048)