我有一堂课
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);
});
}
}
为此,您必须运行应用程序而不是将单个类作为独立的应用程序运行。使用自动装配时,spring必须初始化此类,然后才能调用该函数。如果直接运行此类,将没有可用的自动装配类,并且将获得空指针异常。
我希望这有帮助
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。