0

アプリケーションでQuartzスケジューリングを使用して、自己監査メールを生成および送信するジョブをスケジュールしています。
GroovyPagesTemplateEngineを使用して、電子メールテンプレートから処理されたemailBodyを生成しようとしています。処理でQuartzスケジューリングが使用されていない場合、emailTemplateはEmailBodyに適切に処理されます。ただし、Quartzを使用して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が関連付けられていないことを認識しています。これが原因でメール処理が失敗していると思います。UIからアプリケーションにログインするのではなく、スケジュールされたジョブの実行時にemailtemplateを処理してemailBodyコンテンツを生成するにはどうすればよいですか。

前もって感謝します。

4

2 に答える 2

0

resourceLoader は、新しいインスタンスを直接作成しているだけなので、groovyPagesTemplateEngine では初期化されません。代わりに、Spring の依存性注入に任せるべきです。

次の行をサービスに追加します。

class YourService {

    def groovyPagesTemplateEngine

    def getInfo(){
      GroovyPagesTemplateEngine engine = groovyPagesTemplateEngine
      //your code here
    }
}
于 2012-04-09T11:08:09.977 に答える
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 に答える