我需要写一个 spring 批处理来调用网络服务有没有例子

I need to write a spring batch to call the web service is there any example

我必须编写一个调用 Web 服务 (SOAP) 作为输入的批处理 (read/process/write),然后处理结果(项目列表)以最终将它们写入数据库。我如何调用网络服务

我们做了类似的事情,这是我们的方法:

肥皂部分:

  1. 我们使用 WebServiceTemplate 与 SOAP 服务器和方法 marshalSendAndReceive 通信,它基本上向某些 url 和 returns [=53= 发送 xml 请求] 回应
  2. 我们使用 Spring Retry 机制,因为 SOAP 通信并不总是可靠的,所以我们设置了每个 SOAP 调用至少 5 次,直到我们放弃并失败作业执行
  3. 我们使用 Jaxb2Marshaller 进行序列化和反序列化以及从 wsdl 生成 POJO

Spring批处理部分:

  1. 我们实现了自己的 ItemReader,在 @BeforeStep 中,我们从 SOAP 服务器获取要处理的项目列表(我不确定这是否是最佳方法,但有了重试机制,这是可靠的够了),我们的 @Override of read 方法没什么特别的,它遍历列表直到耗尽
  2. 在处理器中,我们将 SOAP 项转换为 DB 实体
  3. 在 writer 中,我们确实将项目保存到我们自己的数据库中

示例: 项目 reader 正在使用 SoapClient,它是我的 Web 模板包装器,它正在执行 soap 调用、解组响应和返回项目列表。

@Component
@StepScope
public class CustomItemReader implements ItemReader<SoapItem> {

    private List<SoapItem> soapItems;

    @Autowired
    private SoapClient soapClient; 

    @BeforeStep
    public void beforeStep(final StepExecution stepExecution) throws Exception {
       soapItems = soapClient.getItems();
    }

    @Override
    public SoapItem read() {
        if (!soapItems.isEmpty()) {
            return soapItems.remove(0);
        }
        return null;
    }
}