问题标签 [spring-batch-admin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
813 浏览

spring - 如何通过cron启动spring批处理远程分区作业?

我正在使用 spring batch 和 spring batch admin 来进行我们的日常批处理工作。我已经通过 spring 批处理管理 UI 启动作业,使用 tomcat 7 对其进行了测试。

我的工作有跨不同服务器运行的远程分区步骤,我使用 rabbitmq 作为中间件,用于远程分区的 spring 批处理集成。

在测试时,我在所有服务器上部署应用程序,在所有服务器上启动 tomcat,以便启动所有侦听器(入站网关并发线程),启动所有 bean。

现在我想将它转移到生产中,所以想将它添加到 cron 中,它应该在每天凌晨 4 点自动启动作业。

1) 有没有办法使用 cron 启动工作?

2)在这种情况下,我们是否需要在所有服务器上启动tomcat,或者它可以在没有它的情况下运行?

3)如果我在一台服务器(主服务器)上启动作业,如何在所有服务器上启动 bean、消费者等,以便步骤将作为分区步骤在所有服务器上运行?

在 spring 批处理管理示例中,在 launch-context.xml 中有

我可以将它用于我的用例吗?

0 投票
2 回答
1840 浏览

spring - 如果使用spring集成的远程分区中不存在资源路径,spring批处理中的MessageChannelPartitionHandler如何表现?

我正在使用弹簧批处理远程分区。下面是我的配置

问题是,在多资源分区器中,我传递模式以查找文件并创建等于文件数的分区。但是该目录是在运行时有条件地创建的。

如果目录不存在(输入文件不可用),我希望此步骤成功并继续下一步。

现在,工作只是挂起,不做任何事情。它既不认为该步骤成功也不抛出异常,因此甚至不会失败。它只是在这一步变得空闲。

有没有办法处理这个?我只想将此步骤视为成功并进入下一步。

更新:

刚刚通过创建在本地服务器而不是远程服务器上运行的分区步骤对其进行了测试,如果文件不存在,则默认将步骤标记为已完成。所以问题不在于MultiResourcePartitioner,当我们使用分区步骤在具有上述配置的远程服务器上运行时会出现问题。

我猜,即使没有发送步骤执行消息,它的聚合逻辑也会一直等待响应?是否由于依赖于 IntegrationMessageHeaderAccessor.SEQUENCE_SIZE 标头属性的默认 SequenceSizeReleaseStrategy 并且因为根本没有消息,所以聚合器无法访问 SEQUENCE_SIZE ?

如果没有步骤执行请求,即拆分计数为 0,则它不会进入 forloop,因此不会发送任何消息,但在 for 循环之后它仍然会等待接收响应。有什么解决办法?

0 投票
1 回答
1236 浏览

java - 无法启动 spring-batch-admin 应用程序

我有一个 spring 批处理管理应用程序,其中 META-INF/spring/jobs/ 文件夹中有作业 xml。

作业初始化失败并出现以下错误..

如果我将作业文件夹更改为“bootstrap”……应用程序可以工作……但是作业没有被注册……有没有人遇到过这样的问题。

我的理解是每个工作都有不同的应用程序上下文。但例外是我在“根”上下文中做它

2014 年 7 月 28 日晚上 7:08:07 org.apache.catalina.core.ApplicationContext 日志

示例作业 xml 包含在下面

web.xml 内容附在下面

0 投票
1 回答
1869 浏览

spring - 无法从 Spring Batch Admin 应用程序启动 Spring TaskScheduler

我有一个春季批处理管理项目(1.3.0.RC1),我正在尝试启用 TaskScheduler 以使用 cron 表达式运行作业。

我有一个春季批处理管理项目,我的批处理作业还有另一个项目。我可以通过管理控制台手动执行该作业(这意味着它可以正常加载并且可以正常工作)。但是,该作业永远不会按 cron 计划执行。

如果我使用 main 方法配置 java 类并使用相同的作业 xml 文件将其作为 java 应用程序运行,则作业将按 cron 计划运行(换句话说,在 Spring 批处理管理控制台之外运行作业)。这也应该验证 xml 配置是否正常。

这有效:project2 app.java

project2 META-INF/spring/jobs/scheduleTest.xml

该作业每 30 秒运行一次,并将一些测试输出打印到控制台。

不起作用:当我运行 Spring Batch 管理控制台时,project2 与 project1 打包在一起,job.xml 文件成为类路径的一部分,并且作业在控制台中注册并且可以启动。我可以从控制台运行它,它工作正常,但它不会在预定时间自动运行。在我手动执行后,它也不会在预定时间开始运行。

有人看到我在这里做错了吗?任何指针将不胜感激。或者,如果有人知道在 SBA 中使用 Spring TaskScheduler(不是石英)的示例,那也会有所帮助。提前致谢。我的猜测是 cron 表达式正在存储到不再存在或 SBA 控制台不知道的应用程序上下文中。

0 投票
1 回答
189 浏览

json - Spring Batch Admin - 不显示 JSON 端点

Spring Batch Admin JSON API Guide我读到:

“Spring Batch Admin 可以充当 JSON Web 服务。所有主要的 HTML UI 功能都可以由 JSON 客户端访问。通常,这样做的方法是从 UI 应用程序获取一个普通的 HTML URL 并添加一个 .json 后缀. 所有 JSON 端点都列在示例应用程序的主页上。”

但在我的 Spring Batch 管理控制台中,我没有看到任何 JSON 端点。

我还尝试直接调用添加 .json 的正常端点,如下所示:

但结果始终是 HTML 文档。

有谁知道是否有特定设置可以启用查看 JSON 端点?

0 投票
1 回答
731 浏览

spring - Spring Batch:并行运行作业时 Spring Batch 管理和命令行之间的区别

当我使用“拆分流”并行运行 spring 批处理作业时,我发现 spring 批处理管理和命令行之间存在差异。

我的工作流程如下:

当我从 Spring Batch admin 运行这些作业时,“Job1”可以同时启动“Job2”和“Job4”,然后“Job2”可以启动“Job3”。

此外,在“step1”完成后,“Job1”完成。然后“Job2”和“Job4”并行继续它们的过程。
“Job1”不等待“Job2”和“Job4”完成。

spring batch admin的app-context.xml和Job配置如下:
Job1.xml

应用程序上下文.xml

但在命令行中,与 spring batch admin 有一些区别。
app-context.xml 和命令行的作业配置如下:
Job1.xml

应用程序上下文.xml

当我从命令行运行作业时,“Job1”可以同时启动“Job2”和“Job4”,然后“Job2”可以启动“Job3”。

问题是

虽然“step1”已经完成,但“Job1”的状态仍然是“Unknown”。只有在“Job2”和“Job4”完成后,状态才会变为“Completed”。
“Job1”正在等待“Job2”和“Job4”完成。

但是在春季批处理管理中,“Job1”不会等待“Job2”和“Job4”。一旦“step1”完成,“Job1”的状态就会变为“Completed”。

我不希望“Job1”在命令行中等待“Job2”和“Job4”。
有没有办法这样做???

附言。很抱歉,问题很长,感谢您的帮助。

0 投票
2 回答
3270 浏览

java - 服务器停机后如何恢复春季批处理作业

问题是关于批处理作业的自动恢复策略。当有多个作业正在运行(状态为“STARTED”且结束时间为空)时,说服务器由于未知原因而关闭。当我们再次启动服务器时,我们如何才能恢复所有这些工作。

在我的情况下,我编写了自己的作业启动器来接收请求并将它们保存到数据库队列中。然后我运行自己的作业调度程序来轮询来自数据库的请求并执行作业。为了将这些作业的状态从“STARTED”更改为“STARTING”以便我的调度程序再次接收,我当前的尝试包含:

  1. 因为spring batch无法重启“STARTED”作业,甚至job是可重启的,spring batch会在同一个job实例下创建一个新的job执行。因此,如果我可以重新启动作业,则需要更改原始作业 ID。但是我们尝试使用作业运算符以“已启动”状态停止作业,然后再次重新启动它,但失败了。为什么这不起作用?

    jobOperator.stop(jobId); jobOperator.restart(jobId);

  2. 我也未能使用作业存储库将作业执行状态从“STARTED”更新为“STARTING”。

    jobExecution.setStatus(BatchStatus.STARTED); jobRepository.update(jobExecution);

任何实现这一目标的想法将不胜感激!

0 投票
0 回答
63 浏览

caching - MultiResourceItemReader 的解析使用 spring-batch-admin 缓存

对于每个作业启动,文件扫描的内容是不同的,文件被其他文件替换。但除非我停止并重新启动 Web 应用程序(基于 spring-batch-admin),否则该步骤将失败,因为文件扫描的结果缓存在某处。因此,阅读器 (MultiResourceItemReader) 无法找到磁盘上不再存在但已由前一个实例处理的文件。我想知道如何清除缓存而不必重新启动 Web 应用程序。

谢谢。

0 投票
1 回答
1235 浏览

java - Spring Batch Job 抛出 NoSuchMethodError: BinaryExceptionClassifier.classify(Throwable) : Boolean

我将 Springframwork 4.0.6 与 Spring-Batch 3.0.1 一起使用,并且在NoSuchMethodError从 Spring-Batch-Admin(版本 1.3.0)中执行作业时感到奇怪。我认为这可能是版本控制问题:

这是我的工作定义。以防万一。

有没有人遇到过类似的问题?

0 投票
2 回答
689 浏览

spring - Spring Batch Admin Webapp 无法停止作业,发送 Http POST 而不是 DELETE

当尝试从 spring-batch-admin webapp(版本 1.3.0)中停止作业时,会出现以下错误页面:

控制器需要一个 DELETE 方法来停止作业,但是从停止按钮触发了一个 POST。有谁知道如何解决这个问题?

在此处输入图像描述

编辑:我做了一些进一步的研究,偶然发现了春季论坛上一篇三年前的帖子。这表明HiddenMethodFilter我的 web.xml 中可能缺少一个。当我将批处理管理集成到 Spring Boot 应用程序中时,可能存在配置问题。现在我只需要弄清楚如何将上述过滤器添加到我的 spring-boot-mvc 默认值中。

编辑:我逐渐更好地了解引擎盖下发生了什么。我在这里对我的问题提出了一个更具体的问题。

任何帮助表示赞赏!