我正在尝试在Spring Boot应用程序中的TimerTask中创建一个runnable。 TimerTask每5秒运行一次,它不断更新数据并将其存储到结果中。在TimerTask内部,我需要处理这些数据,但它需要超过5秒(通常约一分钟)。我想通过将它放入另一个线程来分离这个更长的任务。
一般要点如下:
Spring启动组件:
@Component
public class dbUpdateScheduler {
Timer timer = new Timer(true);
long periodInMs = 10000;
UpdateDB mytask = new UpdateDB(dBaccessor);
timer.scheduleAtFixedRate(mytask , periodInMs, periodInMs);
}
的TimerTask:
public class UpdateDB extends TimerTask {
private final DBaccessor dBaccessor;
@Autowired
private TaskExecutor taskExecutor;
UpdateDB(DBaccessor dBaccessor) {
this.dBAccessor = dBaccessor;
}
@Override
public void run() {
Iterable <Document> results = this.dBAccessor.getstuff();
ExtraTask extratask = new ExtraTask(results);
taskExecutor.execute(extratask); //failing here
}
}
ExtraTask.java:
@Configurable
public class ExtraTask implements Runnable {
@Autowired
private Iterable <Document> results;
ExtraTask(Iterable <Document> results) {
this.results = results;
}
@Override
public void run() {
//proccess stuff
}
}
不确定如何继续,我在taskExecutor的执行行得到一个nullPointerException。可能的解决方案是否涉及自动装配结果并注入ExtraTask?