groovyPagesTemplateEngine在石英作业中失败并出现错误

时间:2012-04-09 07:46:47

标签: exception grails groovy quartz-scheduler template-engine

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

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。我认为电子邮件处理因此而失败。 如何在运行预定作业时处理emailtemplate以生成emailBody内容,而不是从UI登录应用程序。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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

class YourService {

    def groovyPagesTemplateEngine

    def getInfo(){
      GroovyPagesTemplateEngine engine = groovyPagesTemplateEngine
      //your code here
    }
}

答案 1 :(得分: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