当前位置: 首页 > 知识库问答 >
问题:

如何查找任何以前运行的作业/任务没有在spring Batch中运行?我尝试了一些代码,但不确定

梁丘兴腾
2023-03-14

我面临的问题是,有时可能有大量的数据,这可能需要工作执行超过10分钟。在这种情况下,我希望检测是否有任何作业已经在运行?如果没有,那么只有我会重新运行一个新的作业实例。如果该作业已经在运行,那么我将跳过“新作业实例调用”。我写了一些代码,如下所示。

Job job = (Job) context.getBean("job");

JobExplorer explorer = (JobExplorer) context.getBean("jobExplorer");

// Fetching all job instances.
List<JobInstance> jobInstances = explorer.findJobInstancesByJobName(
        job.getName(), 0, explorer.getJobInstanceCount(job.getName()));

// Fetching the last job instance.
JobInstance lastJobInstance = jobInstances.get(0);

//Obtain all executions for last job instance.
List<JobExecution> executions = explorer.getJobExecutions(lastJobInstance);

// fetching last job execution
JobExecution lastJobExecution = executions.get(0);

System.out.println("Is my last Job running? \nAns:"+lastJobExecution.isRunning());

一些事情,这段代码是检查以前所有正在运行的作业。我所假设的是,如果我启动服务器,那么在服务器启动之前不会有其他作业在运行,如果我在检查之前的作业是否在运行之后运行一个作业,我假设在我的调度程序代码中不会调用其他作业。

我想知道这是正确的做法吗?我的意思是要确保您在同一时间为同一作业只运行一个作业实例,并且在完成对同一作业的任何先前运行之后也是如此。

p.s作业实例、jObExplorer和jobLauncher被注入到调度器中。这只是一个类似的代码,因此使用上下文获取bean。

谢谢你的阅读。

共有1个答案

公西培
2023-03-14

如果您使用的是调度程序,那么您可能应该有一个JobLauncherDetails类,可以在其中添加参数,如

JobParameters jobParameters = getJobParametersFromJobMap(jobDataMap);

其中一个paramter可以是您的最后一个运行时,向该映射添加一个dateTime param,并使用JobCompletionReader的实例

jobCompletionReader.getLastCompleteDate()

与10分钟前比较,看看你是否完成了“10分钟前的工作”。像这样的东西应该对你有用。

 类似资料:
  • 我有一个优化代码运行在sagemaker。我想每1小时运行一次代码。我怎么能在sagemaker安排跑步?。我不想调用模型endpoint,但我想在每1小时运行整个代码。

  • 我有一个系统,其中REST API(Flask)使用spark-sumbit向正在运行的PySpark发送作业。 出于各种原因,我需要spark同时运行所有任务(即我需要设置执行器的数量=运行时的任务数量)。 这可能通过一项工作来实现吗?

  • 在VS Code中,我必须先运行构建任务,然后开始调试,而在CLion中,我只需单击调试,然后在必要时自动构建并开始调试。在VS Code中也有自动化的方法吗?

  • 我有一大堆Scalaz任务。创建方式如下: 我希望这些任务并行运行。以随机顺序打印数字,不要花5秒钟(每个任务有50个任务和100毫升睡眠)。 但是,很明显,每个任务需要100毫秒,所有任务都需要5秒钟,并且创建的列表是有序的。 如何并行运行它们?任务在哪里运行线程?

  • 问题内容: 我要延迟设置某项倒计时计时器的时间,该计时器将在一定时间后“做某事”。 我希望我的程序的其余部分在等待时继续运行,所以我尝试制作自己的程序,其中包含一分钟的延迟: 尽管这种方法行之有效,但似乎应该有一种更好的方法。 我不需要任何复杂的东西。我只想在一定时间后做一件事情,而让程序的其余部分仍然运行。 我应该如何安排一次任务来“做某事”? 问题答案: 虽然过去曾经是安排未来任务的好方法,但

  • 我在build.gradle中创建了一个新的gradle任务: 哪个应该运行rerun.sh: 我使用IntelliJ作为IDE。如何运行此任务? 我尝试在zshell控制台中运行并收到此错误: gradle调用CL zsh:找不到命令:gradle 但是在 IDE 中,我一直使用 gradle,因此必须安装它。 我怎么才能解决这个问题?我的写作还好吗?