【问题标题】:Grails Quartz Plugin: Call service from cron (Session = NULL)Grails Quartz 插件:从 cron 调用服务(会话 = NULL)
【发布时间】:2014-10-10 05:38:11
【问题描述】:

嘿,我有以下问题。

我有一个从控制器调用的服务“a”并且运行良好。

问题:当我从 cron 调用相同的服务时,服务找不到会话对象。

CRON 作业

@Transactional
class TESTCLASS{

    def javax.sql.DataSource dataSource
    def sessionFactory

    static triggers = {
      cron name: 'TESTCLASS', cronExpression: "0 07  23 * * ?"
    }

    def execute() {
        Session s = sessionFactory.getCurrentSession(); 
        CrawlerService crawler = new CrawlerService()
        crawler.updatePagesWithoutCount(s)
    }
}

服务

@Transactional
class CrawlerService {

def updatePagesWithoutCount(Session s){

    if(session==null){println ">>>> SESSION = NULL"}
    else{println ">>>> SESSION OK: "+session.toString()}
        //get all entries without count yet

在打印演示文本之前,该方法就失败了

Error |
2014-08-16 23:07:00,132 [quartzScheduler_Worker-1] ERROR listeners.ExceptionPrinterJobListener  - Exception occurred in job: Grails Job
Message: java.lang.NullPointerException
   Line | Method
->> 111 | execute in grails.plugins.quartz.GrailsJobFactory$GrailsJob
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   202 | run     in org.quartz.core.JobRunShell
^   573 | run . . in org.quartz.simpl.SimpleThreadPool$WorkerThread
Caused by NullPointerException: null
->>  29 | $tt__execute in twagocrawler.UpdatePagesWithoutCountJob
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   104 | execute in grails.plugins.quartz.GrailsJobFactory$GrailsJob
|   202 | run . . in org.quartz.core.JobRunShell
^   573 | run     in org.quartz.simpl.SimpleThreadPool$WorkerThread

有什么想法吗?如何访问服务中的会话?顺便说一句,在 cron-job 中可以访问会话,我可以在那里轻松地使用它。服务中的 sessionFactory 对象也为空。

真的会得到任何帮助..

【问题讨论】:

    标签: session grails cron quartz-scheduler


    【解决方案1】:

    在调用服务之前,您正在创建服务的新实例:

    CrawlerService crawler = new CrawlerService()
    crawler.updatePagesWithoutCount(s)
    

    所以,这不会得到 Spring 依赖注入的东西。你有没有试过做一个:

    def crawlerService
    

    在你的 Job 类的顶部?这样应该可以正确注入 CrawlerService。

    另外,我注意到您将会话作为参数传递给 updatePagesWithoutCount,但是您从未对服务方法中传入的变量执行任何操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      相关资源
      最近更新 更多