- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一个 spring-batch 作业,我使用调度程序每 10 分钟执行一次。现在这项工作主要是将数据从一个数据库传输到另一个数据库的任务。
我面临的问题是有时可能存在大量数据,可能需要作业执行超过 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());
有几件事,这段代码是检查之前所有正在运行的作业。我假设的是,如果我启动服务器,那么在服务器启动之前不会运行其他作业,如果我在检查上一个作业是否运行后运行作业,我假设我的调度程序代码中不会调用其他作业。
我想知道这是正确的方法吗?我的意思是确保您同时只为同一个作业运行 1 个作业实例,并且在完成同一作业的任何先前运行之后也是如此。
P.S 作业实例以及 jObExplorer 和 jobLauncher 被注入(inject)到调度程序中。这只是一个类似的代码,因此使用上下文获取 bean。
感谢您的阅读。
最佳答案
如果您使用调度程序,那么您可能应该有一个 JobLauncherDetails 类,您可以在其中添加参数,例如
JobParameters jobParameters = getJobParametersFromJobMap(jobDataMap);
其中一个参数可以是您上次运行的时间,向此映射添加一个 dateTime 参数并使用 JobCompletionReader 的实例
jobCompletionReader.getLastCompleteDate()
与10分钟前比较,看看你是否完成了“10分钟前的工作”。类似的东西应该适合你。
关于java - 如何查找以前运行的作业/任务未在 Spring Batch 中运行?我尝试了一些代码但不确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28916980/
我是 firebase 的新手,我正在尝试分页查询。我喜欢有一个“下一个”和“上一个”按钮。我的下一个按钮工作正常,我的问题是单击上一个 引用:https://firebase.google.com/
抱歉,标题这么蹩脚,但我只是不知道该放什么,希望你能理解。另外,我不知道以前是否有人问过类似的问题,因为我不知道合适的关键字 - 因此也无法用谷歌搜索。 基本上...在查看preg_match_all
我想在 TFS 中 check out 一个检入文件的先前版本。我可以轻松获得特定文件的变更集 ID 列表,但无法弄清楚如何 checkout 以前的版本。 我目前的代码: var workspace
我想使用 @FunctionalInterface来 self 代码中的 Java 8,但我希望能够将生成的类文件与 Java 6 一起使用。我认为我应该将源版本设为 1.8 , 目标版本为 1.6
自从 versions 被删除以来,我一直无法找到安装以前版本软件的方法。命令并点击 Homebrew。我在 2008 Mac Pro (3,1) 上运行 macOS 10.14.3 (Mojave)
当我开始当前的项目时,App Store 中已经有一个应用程序。此应用程序仅适用于 iPhone。 我的第一个任务是测试和构建一个也可以在 iPod Touch 上运行的版本。 大约 3 周前,App
我在 GitHub 上有一个曾经是 fork 的 repo,但现在不是了,因为我已经删除了原始项目的任何痕迹并开始了一个同名的新项目。 但是,GitHub 仍然表示该项目是 fork 的。有什么方法可
我是一名优秀的程序员,十分优秀!