有没有办法找出自JVM启动以来的时间?
当然,除了在接近开始的某个地方启动计时器main,因为在我的场景中我正在编写库代码并且要求在启动后立即调用某些东西是太麻烦.
我使用以下逻辑在单节点 Spring Batch 应用程序上重新启动未完成的作业:
public void restartUncompletedJobs() {
try {
jobRegistry.register(new ReferenceJobFactory(documetPipelineJob));
List<String> jobs = jobExplorer.getJobNames();
for (String job : jobs) {
Set<JobExecution> runningJobs = jobExplorer.findRunningJobExecutions(job);
for (JobExecution runningJob : runningJobs) {
runningJob.setStatus(BatchStatus.FAILED);
runningJob.setEndTime(new Date());
jobRepository.update(runningJob);
jobOperator.restart(runningJob.getId());
}
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我正试图让它在双节点集群上工作。每个节点上的两个应用程序都将指向共享的 PostgreSQL 数据库。
让我们考虑以下示例:我有 2 个作业实例 -jobInstance1正在运行node1,jobInstance2正在运行node2。Node1在jobInstance1执行过程中由于某种原因重新启动。后node1重新启动春季批处理应用程序尝试重新启动与上面给出逻辑未完成任务-它看到有2个未完成的作业实例-jobInstance1和jobInstance2(这是正常运行的node2),并尝试重新启动它们。这种方式改为重新启动 only jobInstance1- 它将重新启动jobInstance1 …