0

我们在我们的应用程序中使用 Quartz 调度来调度作业以生成和发送自审核电子邮件。
我正在尝试使用 GroovyPagesTemplateEngine 从电子邮件模板生成处理后的 emailBody。当处理不使用 Quartz 调度时,emailTemplate 被正确处理成 EmailBody。但是,当使用 Quartz 运行作业进行电子邮件模板处理时

groovyPagesTemplateEngine is failing in quartz job with error
[12:10:55 AM] Mandar: java.lang.IllegalStateException: TemplateEngine not initialised correctly, no [resourceLoader] specified!

这就是我想要做的

def getInfo(){
MockHttpServletRequest servletRequest = new MockHttpServletRequest()


    GrailsWebRequest grailsWebRequest = new GrailsWebRequest(servletRequest, new MockHttpServletResponse(), new MockServletContext())
    grailsWebRequest.setAttribute(GrailsApplicationAttributes.WEB_REQUEST, grailsWebRequest, 0)
    RequestContextHolder.requestAttributes = grailsWebRequest

    GroovyPagesTemplateEngine engine = new GroovyPagesTemplateEngine()

    StringWriter sw = new StringWriter()
    PrintWriter pw = new PrintWriter(sw)

    engine.createTemplate('myteplate').make(model).writeTo(pw)
    println sw.toString()
    return sw.toString()
}

我知道 Quartz 调度程序没有与之关联的 WebRequest。我认为电子邮件处理因此而失败。如何在计划作业运行时处理电子邮件模板以生成 emailBody 内容,而不是通过从 UI 登录到应用程序。

提前致谢。

4

2 回答 2

0

您可以尝试使用http://www.intelligrape.com/blog/2010/12/27/request-mocking-to-use-groovypagestemplateengine-in-backend-threads/中提到的步骤

如果您使用的是 Grails 2.0.x,您将获得一个名为 groovyPageRenderer 的 bean,它也可以在 Web 请求的上下文之外使用。更多详情, http: //mrhaki.blogspot.in/2012/03/grails-goodness-render-gsp-views-and.html

于 2012-04-10T01:52:24.627 回答
0

resourceLoader 没有在 groovyPagesTemplateEngine 中初始化,因为您只是直接创建它的新实例。相反,您应该让 Spring 的依赖注入为您完成这项工作。

将以下行添加到您的服务中:

class YourService {

    def groovyPagesTemplateEngine

    def getInfo(){
      GroovyPagesTemplateEngine engine = groovyPagesTemplateEngine
      //your code here
    }
}
于 2012-04-09T11:08:09.977 回答