TimerTask Spring Boot中的TaskExecutor

时间:2018-04-25 19:57:51

标签: java spring multithreading spring-boot

我正在尝试在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?

0 个答案:

没有答案