来自数据库的带有 Freemarker 模板的 Spring Mail
Posted
技术标签:
【中文标题】来自数据库的带有 Freemarker 模板的 Spring Mail【英文标题】:Spring Mail with Freemarker Templates from Database 【发布时间】:2018-04-06 22:44:40 【问题描述】:我是将 Freemarker 添加到 Spring 和 Spring Mail 的新手。我没有使用 Spring Boot,但我使用的是最新的 Spring 4.x,虽然我们有一个应用程序上下文 XML 文件,但我们确实使用了注解。
所以,最终我想从数据库中读取模板,因为我们可能为许多客户提供了许多模板。我们不会从文件名或磁盘加载模板。
我们的 Spring 应用程序是一个 Maven 多模块项目:
entity.jar - module
dao.jar - module
services.jar - module
ws.jar - module
在服务下,我们有一个应用上下文文件,它定义 Freemarker 如下:
<bean id="freemarkerConfiguration"
class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
<property name="preTemplateLoaders">
<list>
<ref bean="databaseTemplateLoader" />
</list>
</property>
</bean>
<bean name="databaseTemplateLoader"
class="com.myapp.server.util.DatabaseToFreeMarkerTemplateLoader" />
我有一个新的类叫做:
public class DatabaseToFreeMarkerTemplateLoader extends StringTemplateLoader
// todo: add code here
但我不确定这里还需要什么。我在网上找了一些例子,但找不到太多。
如果有人可以给我举个例子,或者让我参考这里的另一个链接,我会尽我所能,看看我是否能从字面上填空。
谢谢!
顺便说一句:我很惊讶我必须在我的服务层中包含 spring-web 才能完成这项工作。我只是想格式化电子邮件而不是 html 页面。因此,如果有更好的格式化工具可以与 Spring 无缝协作,请告诉我。
【问题讨论】:
【参考方案1】:我不太了解 Spring 的这一部分,但我认为您不需要 spring-web
。您可以直接使用 FreeMarker API 进行配置(即创建 freemarker.template.Configuration
单例 bean)和生成输出(template = configuration.getTemplate(...)
、template.process(...)
)。最后,您只需使用message.setText(theOutputFromTemplateDotProcess, true);
(其中message
是Spring MimeMessageHelper
)。所以我相信这里没有太多可以与 Spring 集成的东西。 (即使有人需要从 Spring 资源加载模板,他们也可以通过 Configuration.setTemplateLoader
使用 org.springframework.ui.freemarker.SpringTemplateLoader
。)
至于直接使用 FreeMarker API(与 Spring 无关),请参见此示例:http://freemarker.org/docs/pgui_quickstart_all.html
【讨论】:
以上是关于来自数据库的带有 Freemarker 模板的 Spring Mail的主要内容,如果未能解决你的问题,请参考以下文章