我已经在Spring Cloud Data Flow上部署了一个Spring Batch项目作为任务。
我第一次启动任务(它将运行大约5分钟,这使得任务的状态为“正在运行”)。然而,我已经第二次重新启动了这个任务,当它的状态为运行时,它再次工作。
1)如何配置任务直到最后一次处于完成状态才能重新启动?2)此外,我发现当停止作业时,它会一直执行,直到完成当前步骤(我的作业有2个步骤,第二个步骤没有执行)。但是,当我停止作业时,有什么方法可以立即关闭它(步骤1)吗?
您可以使用 JobExplorer 类来检查正在运行的作业,请参阅 jobExplorer.findRunningJobExecutions(jobName)
方法。
在JobLauncher类中,您可以像这样:
@Component
public class MyJobLauncher {
private static final Logger LOG = LoggerFactory.getLogger(MyJobLauncher.class);
private final Job job;
private final JobLauncher jobLauncher;
private final JobExplorer jobExplorer;
@Autowired
public MyJobLauncher(@Qualifier("myJob") Job job, JobLauncher jobLauncher, JobExplorer jobExplorer) {
this.job = job;
this.jobLauncher = jobLauncher;
this.jobExplorer = jobExplorer;
}
public void launchJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException,
JobRestartException, JobInstanceAlreadyCompleteException, IOException {
if (jobExplorer.findRunningJobExecutions("myJob").isEmpty()) {
LOG.info("Starting myJob");
jobLauncher.run(job, new JobParameters());
LOG.info("Stopping myJob");
}
}
}
要关闭作业,请检查 JobExecution.stop() 方法,该方法可以从 jobExplorer.getJobExecution()
方法获取。
如何避免在Spring Cloud Data Flow上运行任务状态时重新启动任务
Spring Cloud Task 2.0.0添加了一项功能,允许您阻止任务并发运行。请参阅https://spring.io/blog/2018/05/07/spring-cloud-task-2-0-0-release-is-now-available#restricting-concurrent-task-execution
您需要激活spring.cloud.看作
属性。
您可以在限制Spring Cloud任务实例一节中找到更多细节。
我们在遗留代码和当前代码之间有一个粘合组件。本质上,整个遗留应用程序是单线程的,并且存在可怕的问题,单个指令的用户界面刷新可能会发生5到8次。 我想在第一次更新请求发生2秒后发布一条异步消息。 让我们不要纠结于为什么,这不是我真正想要做的,但我必须了解如何至少做到这一点,这样我才能实施真正的解决方案。 理论是:如果未来的任务不存在,我们会创建它,一旦它存在,如果它没有完成(因为这是错误的遗留更新4
我正在使用 Kubernetes 作为容器编排器构建一个微服务应用程序。该应用程序现已启动并运行,但我有其他问题。那是在我的服务中,我每天都有一个计划任务运行,当服务部署时,将运行多个服务实例(通过设置副本编号),创建多个同时运行的任务。我期望的是只有一个服务任务实例将运行,而不是多个实例。有什么技术可以处理这种情况吗? 库伯内特斯 Asp.net核心构建微服务 CI/CD的基岩实现 Fabrik
问题内容: 我一直在研究如何使用Java 8和spring在运行时更改作业的频率。这个问题非常有用,但是并不能完全解决我的问题。 现在,我可以配置下次上班的日期。但是,如果将延迟设置为1年,那么我需要等待1年才能考虑新配置。 我的想法是,如果更改了配置值(因此来自另一个类),则停止计划的任务。然后重新计算下一次应执行的任务。也许有更简单的方法可以做到这一点。 这是我到目前为止的代码。 这就是我想做
我在build.gradle中创建了一个新的gradle任务: 哪个应该运行rerun.sh: 我使用IntelliJ作为IDE。如何运行此任务? 我尝试在zshell控制台中运行并收到此错误: gradle调用CL zsh:找不到命令:gradle 但是在 IDE 中,我一直使用 gradle,因此必须安装它。 我怎么才能解决这个问题?我的写作还好吗?
我回顾了这个问题的答案,其中提出了一些后续问题,涉及将解决方案泛化以支持每个类别的可变行数,现在我已经准备好了代码,可以将各种任务拆分为所需的行。 我已经使用了原来的小提琴并对其进行了修改,看到这里可以更好地理解这个概念。 我可以看到我们有一个必须一起工作的数字。我们首先似乎需要为每个将有多行的类别中断,我们需要将“y”属性设置为类别偏移量的十进制部分,并且我们需要在类别系列上应用翻译。 目前尚不
问题内容: 如何检查一项任务是否在celery中运行(特别是我在使用celery-django)? 我已经阅读了文档,并且已经在Google上进行了搜索,但是看不到类似以下的呼叫: 我的用例是我有一个外部(java)服务来进行代码转换。当我发送要进行代码转换的文档时,我想检查运行该服务的任务是否正在运行,如果没有运行,请(重新)启动它。 我相信我使用的是当前的稳定版本2.4。 问题答案: 每个对象
我正在从事一个spring boot项目,以自动化与gradle的集成测试。我最近开始在一家新企业工作,我的同事们按如下方式运行集成测试:在构建中。gradle文件有一个集成测试任务 启动任务后,应用程序开始在指定端口运行,然后打开postman,导入集合并运行测试。 我的工作是找到一种方法来跳过额外的点击,即自动运行邮递员集合。第一个想法是使用postman-run gradle插件,但由于企业
我正在使用 Windows 服务器 2016 数据中心。每当服务器重新启动时,我在任务计划程序中的计划任务总是停止运行。只有在我手动进入应用程序并重新键入我的用户帐户密码后,它才会再次开始工作。这是设置还是条件问题?