gpt4 book ai didi

java - 如何使用Spring Batch连接服务器?

转载 作者:行者123 更新时间:2023-11-30 06:01:05 26 4
gpt4 key购买 nike

我需要经验丰富的 Spring Batch 程序员的帮助来解决我遇到的特定问题。

我是 Spring Batch 的新手。它有每个类或接口(interface)的详细文档,但几乎没有任何一起工作的文档。

场景:
我有一个托管在云上的数据库,因此我必须进行 REST 调用以从中获取一些数据并将相关数据保存到其中。
- 数据检索将返回包含我查询的数据的 JSON 响应。
- 数据保存将返回有关添加了多少行等的 JSON 响应。
- 所有响应都将具有有效的 HTTP 状态代码。
- 当保存调用成功且 Http 代码为 200 且接收到显示插入了多少记录的数据时,事务就完成了。

连接可能并不总是可用,在这种情况下,程序必须每 5 分钟重试一次,直到整个任务完成。

我选择不做的事情
我可以做一些肮脏的 Java 技巧(令人惊讶的是,许多人在堆栈溢出中推荐了这些技巧)

  1. 线程和 sleep (太粗糙)
  2. Spring 的 @Scheduled(调度程序即使在作业完成后仍保持运行)

我尝试过的
所以我决定使用 Spring Batch,因为它似乎是为此而设计的框架。

  1. 我没有文件任务,所以我使用了 Tasklet 而不是 Readers 和作家。

  2. Tasklet 接口(interface)只能返回 FINISHED 状态代码。无代码失败

  3. 因此,在 tasklet 内,我在 StepContext 中设置了一个自定义值并检索了我的自定义值StepExecutionListener 中的值并进行相应配置失败步骤的存在状态

  4. 为了处理这个解决方法,我必须配置一个 JobExecutionListener使作业相应失败。

除了上述所有解决方法之外,

  1. Spring 批处理没有任何调度。我必须最终使用另一个调度程序。
  2. Spring Batch 在步骤内的重试仅有效适用于 ItemReader、ItemWriter 等,不适用于微线程

问题

  1. Spring Batch 适合这种情况吗?

  2. 我的设计正确吗?看起来非常“hack”。

我需要帮助以最有效的方式处理我的情况

最佳答案

我使用 Spring Batch 来处理类似的情况 - 作为执行引擎来处理大文件,这会导致向其他系统发出大量 REST 请求。

Spring批处理给我带来了什么:

  • 用于大型相关操作的执行引擎/模型。换句话说,我可以将我的输入维持为一个单一入口点,并在其他小型操作之上进行“巨大”交易。
  • 可以查看执行结果并对其进行监控。
  • 批量操作的可重试性。这是 Spring 批处理中最好的事情之一
  • 它允许您以这样的方式设计操作:如果在执行过程中出现问题,您可以简单地重新启动它并从故障点继续。但你需要投入一些努力来维持这一点。

有关业务案例的更多信息,请访问:https://docs.spring.io/spring-batch/trunk/reference/html/spring-batch-intro.html#springBatchUsageScenarios

因此,您需要仔细检查这些业务案例,并回答自己是否确实需要它们。到目前为止你所描述的 - 我真的没有看到 Spring 批处理对你有什么好处。

关于java - 如何使用Spring Batch连接服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52262759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com