【问题标题】:Service not injecting properly into quartz job class With quartz scheduler plugin (v1.0.1) for grails 2.3.6使用用于 grails 2.3.6 的石英调度程序插件 (v1.0.1) 的服务未正确注入到石英作业类中
【发布时间】:2014-04-22 14:58:27
【问题描述】:

我已经实现了我自己的采用服务方法的石英作业类。但是,该服务似乎没有正确注入到我的作业类中,因为我在访问服务时总是遇到空指针异常。

如何在作业触发期间注入服务。

关于如何从 Job 类调用服务中的方法的任何建议

更新 1:添加了作业代码和日志消息

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobDataMap;

import com.unitrac.app.reportcentre.report.ReportService;

// Logging
import org.apache.commons.logging.LogFactory;


class ReportJob  implements Job {
    
    
    def reportService;               
    def grailsApplication;
    
    
    // Logging
    private static final log = LogFactory.getLog(this);
           

    void execute(JobExecutionContext context) throws JobExecutionException {
        // execute job
      
      
      JobDataMap jobMapData = context.getMergedJobDataMap();          
          
        
      try
        { 
          log.debug("In Report Job  - executing its JOB at "
              + new Date() + " by " + context.getTrigger().getName());
        
         
        
        String groupName =  context.getTrigger().getJobKey().getName();             
        
        log.debug("group Name  : "  + groupName);
               
        reportService.invokeMethod();
          
        }
      
      catch( Exception e )
      {
          log.error("Exception: $e");
      }     
        
    }
}

| |

Server running. Browse to http://localhost:8080/ReportCentre
2014-04-22 14:50:00,087 [UnitracJobScheduler_Worker-1] DEBUG reportcentre.ReportJob - In Report Job  - executing its JOB at Tue Apr 22 14:50:00 CAT 2014 by CCtrigger
2014-04-22 14:50:00,104 [UnitracJobScheduler_Worker-1] DEBUG reportcentre.ReportJob - group Name  : DevGroup
2014-04-22 14:50:00,106 [UnitracJobScheduler_Worker-1] ERROR reportcentre.ReportJob - Exception: java.lang.NullPointerException: Cannot invoke method invokeMethod() on null object 

【问题讨论】:

  • 嗨 rjvargh。我们能看到作业的代码吗?
  • 所以你的 Job 类中的 def myService 没有注入服务?确保服务名称以小写字母开头(即使类以大写字母开头)。

标签: grails quartz-scheduler


【解决方案1】:

为了它的价值。我尝试了上面的所有建议,但它对我不起作用。我最终决定从 Grails ApplicationContext 手动注入服务。

def ss = Holders.grailsApplication.mainContext.getBean(SampleService.class)

这比使用new()创建服务要好

【讨论】:

    【解决方案2】:

    确保您的工作类在 grails-app/jobs 中并尝试删除 implements Job

    【讨论】:

      【解决方案3】:

      您实际上不需要删除“implements Job”。遇到了同样的问题...

      我猜你正在使用 JobBuilder.newJob(...) 来创建工作

      使用 newJob 会中断注入(它绕过了标准的对象创建模式)。通常,您可以将加载到 JobDetail 中的内容放入触发器中。

      然后使用:ReportJob.schedule(trigger)

      甚至不需要实例即可工作。所有的注射都是快乐的。耶,报告!

      【讨论】:

        【解决方案4】:

        我在需要连接的字段中添加了@Autowired() 注释,这对我有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-22
          • 1970-01-01
          • 1970-01-01
          • 2020-08-28
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          相关资源
          最近更新 更多