开发者社区> 问答> 正文

按名称调用时服务与nullPointer一起使用,而调用rest时服务正常工作

我有一堂课

public class MissingPartitionsTask implements Runnable {
@Autowired
private PartitionsService partitionsService;

private Schedules schedule;

MissingPartitionsTask(Schedules schedule){
    this.schedule = schedule;
}

@Override
public void run() {
    partitionsService.findAll(schedule.getId());
}
}

当我运行它时,我得到

java.lang.NullPointerException
    at MissingPartitionsTask.run(MissingPartitionsTask.java:26)

这是第26行

partitionsService.findAll(schedule.getId());

我查了一下js schedule.getId() 。
它不是空的。表中有3行,其ID为1、2和3。

我也有服务

@GetMapping("/partitions/{id}")
public List<LocalDate> findAll(@PathVariable long id) {
    return partitionsService.findAll(id);
}

当我使用浏览器调用它并返回日期列表时,它可以工作。

http://localhost:8181/partitions/3

为什么不起作用js MissingPartitionsTask ?

编辑我的应用程序类

@SpringBootApplication
@EnableScheduling
@EnableAsync
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

编辑2

@Service
public class SchedulerService {
    @Autowired
    private ScheduleRepository scheduleRepository;

    @Autowired
    private TaskExecutor taskExecutor;

    @Scheduled(fixedRate=60000)
    public void scheduleAll() {
        scheduleRepository.findAll().forEach(
            schedule -> {
                MissingPartitionsTask missingPartitionsTask = new MissingPartitionsTask(schedule);
                taskExecutor.execute(missingPartitionsTask);
            });
    }

}

展开
收起
垚tutu 2019-11-28 18:12:19 1527 0
1 条回答
写回答
取消 提交回答
  • #include

    为此,您必须运行应用程序而不是将单个类作为独立的应用程序运行。使用自动装配时,spring必须初始化此类,然后才能调用该函数。如果直接运行此类,将没有可用的自动装配类,并且将获得空指针异常。

    我希望这有帮助

    2019-11-28 18:12:49
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
开源广进,用service cataloq构造k8s服务能力中心 立即下载
开源广进-用Service Catalog构造K8S服务能力 立即下载
低代码开发师(初级)实战教程 立即下载