session - Grails Quartz 插件 : Call service from cron (Session = NULL)

标签 session grails cron quartz-scheduler

嘿,我有以下问题。

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

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

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

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

真的会给予任何帮助..

最佳答案

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

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

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

在你的工作类的顶部?这应该使得 CrawlerService 被正确注入(inject)。

另外,我注意到您将 session 作为参数传递给 updatePagesWithoutCount,但是您永远不会对服务方法内部传递的变量执行任何操作。

关于session - Grails Quartz 插件 : Call service from cron (Session = NULL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344134/

相关文章:

php - cronjob 每分钟运行一次

linux - crontab 在调用包含输出的 .sh 时不输出任何内容

php - 我们在处理 session 时必须使用 mysql_real_escape_string() 吗?

javascript - express.js - session 访问中间件不工作

grails - Grails 2.2.0,Spring Security-注销功能不起作用

grails - 如何从同一插件中的 src 文件访问我的 Grails 插件中的文件?

node.js - 客户端也是 ExpressJS 应用程序时的 Cookie 处理

spring-mvc - Spring Boot session 处理

json - 为Grails 2.4.X配置HAL JSON渲染器

php - 将 exec 用于长时间运行的脚本