在实现Runnable的类中调用存储库时出现Null指针异常



我有一个项目,其中有一个用例,用户预订了一个会议,假设上午10点到11点与另一个用户会面。现在在后台,我想在上午11点检查会议是否顺利。

为此,我使用了Scheduled Future和Runnable。每当我预订会议时,我都会用相关的会议结束时间cron表达式创建一个预定的未来。。哪个很好但问题是,我无法访问存储库或运行函数中的任何必要服务。我得到一个空指针异常

以下是使用端点触发的会议服务代码之一

public String createMeetingSchedulerJobs(){
BookingDetails booking = repBooking.findAll().get(0);
//create completion check job
String[] dateParts = booking.getDateOfMeeting().split("/");
TaskDefinition taskDefinition = new TaskDefinition();
taskDefinition.setData(booking.getMeetingId());
taskDefinition.setActionType(TaskDefinitonType.MEETING_COMPLETION);
taskDefinition.setCronExpression(miscUtils.generateCronExpression(parseInt(dateParts[0]),parseInt(dateParts[1]),booking.getEndTimeHour(),booking.getEndTimeMinute(),0));
taskDefinitionBean.setTaskDefinition(taskDefinition);
taskDefinitionBean.setMiscUtils(miscUtils);
return taskSchedulerService.scheduleATask(taskDefinition);
}

相关调度器服务代码

public String scheduleATask(TaskDefinition taskDefinition){
String jobId = UUID.randomUUID().toString();
taskDefinition.setId(jobId);
TaskDefinitionBean taskDefinitionBean = new TaskDefinitionBean();
taskDefinitionBean.setTaskDefinition(taskDefinition);
Runnable tasklet = taskDefinitionBean;
ScheduledFuture<?> scheduledTask = taskScheduler.schedule(tasklet, new CronTrigger(taskDefinition.getCronExpression(), TimeZone.getTimeZone(TimeZone.getDefault().getID())));

jobsMap.put(jobId, scheduledTask);
return jobsMap.toString();
}

示例服务

@Service
public class MiscellaneousUtils {
public String returnHello(){
return "Hello there ~";
}
}

任务定义Bean.class

@Configurable
@Service
public class TaskDefinitionBean implements Runnable{
private TaskDefinition taskDefinition;
private MiscellaneousUtils miscUtils;
private BeanFactory beanFactory;
@Override
public void run() {
miscUtils = beanFactory.getBean(MiscellaneousUtils.class);
}
public TaskDefinition getTaskDefinition(){
return taskDefinition;
}
public void setTaskDefinition(TaskDefinition taskDefinition){
this.taskDefinition=taskDefinition;
}
public void setMiscUtils(MiscellaneousUtils miscUtils){this.miscUtils=miscUtils;}
}

我在TaskDefinitionBean.class中尝试过不同类型的依赖项注入,但没有成功。我知道有很多相关的、有见地的问题是相似的,但仍然无法使用这种方法。

我得到的错误是:

java.lang.NullPointerException: null
at fG.Service.TaskDefinitionBean.run(TaskDefinitionBean.java:38) ~[classes/:na]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) [spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514) [na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) [na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:299) [na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) [na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) [na:na]
at java.base/java.lang.Thread.run(Thread.java:844) [na:na]

要使依赖项注入工作您的bean必须由spring创建,您可以手动创建

TaskDefinitionBean taskDefinitionBean = new TaskDefinitionBean();

所以beanFactorynull

您可以在服务中自动连接beanFactory并将其传递给TaskDefinitionBean

最新更新