【问题标题】:Nullpointer injecting a bean when creating a job via quartzNullpointer 在通过石英创建作业时注入 bean
【发布时间】:2015-02-16 00:50:50
【问题描述】:

上下文是下一个:

我有一个使用 Spring 2.5 和 Struts 1.1 的 Web 应用程序 我使用 Quartz 在 Action 中动态创建作业:

JobDetailBean jobDetail = new JobDetailBean();
        jobDetail.setBeanName("foo");
        Map<String, String> map = new HashMap<String,String>();
        map.put("idFeed","foo");
        map.put("idSite","foo");
        jobDetail.setJobDataAsMap(map);
        jobDetail.setJobClass(FeedJob.class);
        jobDetail.afterPropertiesSet();

        CronTriggerBean cronTrigger = new CronTriggerBean();
        cronTrigger.setBeanName("foo");
        String expression = " * * * * * *"; 
        cronTrigger.setCronExpression(expression);
        cronTrigger.afterPropertiesSet();

        // add to schedule
        scheduler.scheduleJob((JobDetail) jobDetail, cronTrigger);

scheduler 是注入到 Action 中的 org.quartz.Scheduler。

FeedJob 类具有 executeInternal(JobExecutionContext ctx) 方法,这是作业必须运行的代码:

public class FeedJob extends QuartzJobBean {

    private FeedBL feedBL;

    public void setFeedBL(FeedBL feedBL) {this.feedBL = feedBL;}

    public FeedJob() {}

    public String idFeed;
    public String idSite;  

      public String getIdFeed() {
        return idFeed;
    }

    public void setIdFeed(String idFeed) {
        this.idFeed = idFeed;
    }

    public String getIdSite() {
        return idSite;
    }

    public void setIdSite(String idSite) {
        this.idSite = idSite;
    }

    protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
         try {
            feedBL.sincronizacionProductFeed(idFeed, idSite);
        } catch (Exception e) {
            e.printStackTrace();
        }
      }

}

当它要运行时,我在尝试运行这行代码时得到一个 java.lang.NullPointerException:

feedBL.sincronizacionProductFeed(idFeed, idSite);

原因是当我在设置作业的操作中创建作业时:

jobDetail.setJobClass(FeedJob.class);

而且 Spring 并没有注意到他已经创建的 bean,因此 FeedJob 类的实例没有上帝注入 feedBL 类。

有解决这个问题的好主意吗? 我试图给这份工作提供这样的背景:

jobDetail.setApplicationContext(applicationContext);

但是没有用。

【问题讨论】:

    标签: spring nullpointerexception quartz-scheduler


    【解决方案1】:

    您可能需要查看this answer。它解决了您遇到的同样问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      相关资源
      最近更新 更多