限制 Spring Cloud Data Flow 上的并发任务执行
Restricting concurrent task execution on Spring Cloud Data Flow
我已经在 Spring 云数据流(使用 @EnableTask
)上部署了一个 Spring 批处理项目作为任务。
我已经使用 spring.cloud.task.singleInstanceEnabled=true
来避免在 Spring 云数据流上的任务状态仍为 运行ning 时重新启动任务。此 属性 放在 Spring 批处理项目的 application.properties 中。 (继此 link -- https://docs.spring.io/spring-cloud-task/docs/2.0.0.RELEASE/reference/htmlsingle/#_restricting_spring_cloud_task_instances)
然而,在测试时结果并不如我所愿:
第一次运行:作业A启动成功(约15分钟)
第二次 运行:作业 A 在第一次 运行 期间再次启动,因此出现错误:
ERROR o.s.c.t.l.TaskLifecycleListener - org.springframework.cloud.task.listener.TaskExecutionException: Failed to process @BeforeTask or @AfterTask annotation because: Task with name "A" is already running.
ERROR o.s.c.t.l.TaskLifecycleListener - An event to end a task has been received for a task that has not yet started.
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
...
Caused by: org.springframework.cloud.task.listener.TaskExecutionException: Failed to process @BeforeTask or @AfterTask annotation because: Task with name "A" is already running.
...
Caused by: java.lang.reflect.InvocationTargetException: null
...
Caused by: org.springframework.cloud.task.listener.TaskExecutionException: Task with name "A" is already running.
当我第二次启动作业时,Spring 云数据流仍然显示成功启动任务 "A" 但日志出现我上面提到的错误。
最后,Task 的状态为 "ERROR",而第 1 次 运行 已完成。 (我认为状态应该是 COMPLETE 因为这是第一次工作)
如何正确限制 Spring Cloud Task 实例?
任务实例限制是 Spring Cloud Task(您的应用程序)的一项功能,而不是 Spring Cloud Data Flow。因此,您所看到的是预期的行为。您可以针对 Spring Cloud Data Flow 项目提出问题,以便我们讨论在 Spring Cloud Data Flow 级别添加该功能。
我已经在 Spring 云数据流(使用 @EnableTask
)上部署了一个 Spring 批处理项目作为任务。
我已经使用 spring.cloud.task.singleInstanceEnabled=true
来避免在 Spring 云数据流上的任务状态仍为 运行ning 时重新启动任务。此 属性 放在 Spring 批处理项目的 application.properties 中。 (继此 link -- https://docs.spring.io/spring-cloud-task/docs/2.0.0.RELEASE/reference/htmlsingle/#_restricting_spring_cloud_task_instances)
然而,在测试时结果并不如我所愿:
第一次运行:作业A启动成功(约15分钟)
第二次 运行:作业 A 在第一次 运行 期间再次启动,因此出现错误:
ERROR o.s.c.t.l.TaskLifecycleListener - org.springframework.cloud.task.listener.TaskExecutionException: Failed to process @BeforeTask or @AfterTask annotation because: Task with name "A" is already running.
ERROR o.s.c.t.l.TaskLifecycleListener - An event to end a task has been received for a task that has not yet started.
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
...
Caused by: org.springframework.cloud.task.listener.TaskExecutionException: Failed to process @BeforeTask or @AfterTask annotation because: Task with name "A" is already running.
...
Caused by: java.lang.reflect.InvocationTargetException: null
...
Caused by: org.springframework.cloud.task.listener.TaskExecutionException: Task with name "A" is already running.
当我第二次启动作业时,Spring 云数据流仍然显示成功启动任务 "A" 但日志出现我上面提到的错误。
最后,Task 的状态为 "ERROR",而第 1 次 运行 已完成。 (我认为状态应该是 COMPLETE 因为这是第一次工作)
如何正确限制 Spring Cloud Task 实例?
任务实例限制是 Spring Cloud Task(您的应用程序)的一项功能,而不是 Spring Cloud Data Flow。因此,您所看到的是预期的行为。您可以针对 Spring Cloud Data Flow 项目提出问题,以便我们讨论在 Spring Cloud Data Flow 级别添加该功能。