java - 使用 spring 在 Quartz 调度程序中完成作业后插入数据

标签 java spring hibernate spring-mvc quartz-scheduler

我正在执行一项任务,我需要在数据库中保存作业状态,但是当我尝试这样做时,它给了我 java.lang.nullpointerexception。我认为它会发生,因为每当我尝试仅在那时从数据库中选择/保存/更新任何记录时,它都会给我类似这样的错误。

这是我的代码

public class PostFBJob implements Job {

    private SchedulerService schedulerService;

    private SubCampaignService subCampaignService;

    @SuppressWarnings("unchecked")
    public void execute(JobExecutionContext context) throws JobExecutionException {

        JobDetail jobDetail = context.getJobDetail();
        JobDataMap jobDataMap = jobDetail.getJobDataMap();

        schedulerService = (SchedulerService) jobDataMap.get("schedulerService");

        SubCampaign subCampaign = (SubCampaign) jobDataMap.get("subCampaign");

        if (prStreamItem.getName().equalsIgnoreCase("Facebook") && StringUtils.isNotBlank(branch.getFbAccessToken())) {
            FacebookService facebookService = FacebookService.getSingleton();
            try {
                subCampaign.setStatus("Completed");
                subCampaign.setMessage("Completed");

                subCampaignService.updateSubCampaign(subCampaign);

            } catch (Exception e) {
                log.error("", e);
            }
        }
    }
}

异常

java.lang.NullPointerException
    at com.ace.Job.SubCampaignJob.execute(SubCampaignJob.java:147)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
Error: java.lang.NullPointerException

请帮我解决这个问题。我是 Spring 和 Quartz 的新手。

提前致谢

最佳答案

此异常是由于 subCampaignService 的空对象。 注入(inject)只对那些由 s​​pring 管理的对象起作用。

扫描您要使用服务的所有包裹。

  1. 基于注解的配置

    @ComponentScan({"com.ace"})

  2. 基于 XML 的配置

    <context:component-scan base-package="com.ace"/>

并在更新之前检查空值,如下所示:

try {
    subCampaign.setStatus("Completed");
    subCampaign.setMessage("Completed");
    if(subCampaign != null && subCampaignService != null) //Check is not null to subCampaign before update
    subCampaignService.updateSubCampaign(subCampaign);
} catch (Exception e) {
     log.error("", e);
}

关于java - 使用 spring 在 Quartz 调度程序中完成作业后插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890963/

相关文章:

java - 使用java,我怎样才能创建一个方法来接收BufferedImage,旋转它,并返回一个BufferedImage(具有正确的宽度/高度)

java - 一张表内的实体之间的继承

spring - Ehcache并发修改异常+Spring+Struts应用

hibernate 和通用字段映射

java - 如何在 Spring 3.0 应用程序中配置 Hibernate 统计信息?

java - Maven 错误 : package org. mockito 不存在

java - Lucene 可以将任意对象附加(或至少跟踪)到文档吗?

java - 在我的 Spring Hibernate 项目上获取 InvokingTargetException

java - Whitelabel错误页面部署到服务器后出现错误

hibernate - 在 hibernate 中设置 session 或事务的超时