0

在计划作业本身的执行中,我想阻止它一次又一次地执行,如果没有我首先创建作业时收到的字符串,我怎么能这样做?

public class UfkJob implements IScheduledJob {

 public void execute(ISchedulingService service) {
   if (...) {
   /* here i want to remove the current running job */
  }
}

我使用以下命令在外面执行了这项工作:

 ISchedulingService service = (ISchedulingService) getScope().getContext().getBean(ISchedulingService.BEAN_NAME);

service.addScheduledJobAfterDelay(5000,new UfkJob(),200);
4

1 回答 1

1

我刚刚意识到我认为我最初回答了错误的问题,为了后代,我将其留在下面。再次假设我正在查看正确的 API。向 UFkJob 添加一个字段:

public class UfkJob implements IScheduledJob {

  String jobName = null;

 public void execute(ISchedulingService service) {
   if (... && jobName != null) {
   /* here i want to remove the current running job */
   ISchedulingService service = (ISchedulingService) getScope().getContext().getBean(ISchedulingService.BEAN_NAME);
   service.removeScheduledJob(jobName);
  }
  public void setJobName(String name){
    this.jobName = name;
  }
}

然后当你安排工作时:

ISchedulingService service = (ISchedulingService) getScope().getContext().getBean(ISchedulingService.BEAN_NAME);
UfkJob job = new UfkJob();
job.setJobName(service.addScheduledJobAfterDelay(5000, job, 200));

或者你总是可以有工作计划本身:

public class UfkJob implements IScheduledJob {

  String jobName;
  ISchedulingService service;

  public UfkJob(ISchedulingService service){
    this.service = service;
    this.jobName = service.addScheduledJobAfterDelay(5000, this, 200);
  }
  public void execute(ISchedulingService service) {
    if (...) {
      service.removeScheduledJob(jobName);
    }
  }

}

//Your calling code
...
new UfkJob((ISchedulingService) getScope().getContext().getBean(ISchedulingService.BEAN_NAME));

-----我在下面的原始答案,我相信是错误的问题----

我不确定我是否正在查看正确库的 API 文档,但是您的方法调用:

service.addScheduledJobAfterDelay(5000,new UfkJob(),200);

定义为:

addScheduledJobAfterDelay(int interval, IScheduledJob job, int delay) 安排一个定期执行的作业,该作业将在指定的延迟后开始。

关键是“定期执行”。听起来您正在寻找的是:

addScheduledOnceJob(long timeDelta, IScheduledJob job) 为将来的单次执行安排一个作业。

所以你的电话是:

service.addScheduledOnceJob(5000, new UfkJob());

这将在方法调用后 5 秒执行一次 UfkJob。

于 2010-05-04T13:56:22.693 回答