我需要写一个 spring 批处理来调用网络服务有没有例子
I need to write a spring batch to call the web service is there any example
我必须编写一个调用 Web 服务 (SOAP) 作为输入的批处理 (read/process/write),然后处理结果(项目列表)以最终将它们写入数据库。我如何调用网络服务
我们做了类似的事情,这是我们的方法:
肥皂部分:
- 我们使用 WebServiceTemplate 与 SOAP 服务器和方法
marshalSendAndReceive
通信,它基本上向某些 url 和 returns [=53= 发送 xml 请求] 回应
- 我们使用 Spring Retry 机制,因为 SOAP 通信并不总是可靠的,所以我们设置了每个 SOAP 调用至少 5 次,直到我们放弃并失败作业执行
- 我们使用
Jaxb2Marshaller
进行序列化和反序列化以及从 wsdl 生成 POJO
Spring批处理部分:
- 我们实现了自己的
ItemReader
,在 @BeforeStep
中,我们从 SOAP 服务器获取要处理的项目列表(我不确定这是否是最佳方法,但有了重试机制,这是可靠的够了),我们的 @Override
of read 方法没什么特别的,它遍历列表直到耗尽
- 在处理器中,我们将 SOAP 项转换为 DB 实体
- 在 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;
}
}
我必须编写一个调用 Web 服务 (SOAP) 作为输入的批处理 (read/process/write),然后处理结果(项目列表)以最终将它们写入数据库。我如何调用网络服务
我们做了类似的事情,这是我们的方法:
肥皂部分:
- 我们使用 WebServiceTemplate 与 SOAP 服务器和方法
marshalSendAndReceive
通信,它基本上向某些 url 和 returns [=53= 发送 xml 请求] 回应 - 我们使用 Spring Retry 机制,因为 SOAP 通信并不总是可靠的,所以我们设置了每个 SOAP 调用至少 5 次,直到我们放弃并失败作业执行
- 我们使用
Jaxb2Marshaller
进行序列化和反序列化以及从 wsdl 生成 POJO
Spring批处理部分:
- 我们实现了自己的
ItemReader
,在@BeforeStep
中,我们从 SOAP 服务器获取要处理的项目列表(我不确定这是否是最佳方法,但有了重试机制,这是可靠的够了),我们的@Override
of read 方法没什么特别的,它遍历列表直到耗尽 - 在处理器中,我们将 SOAP 项转换为 DB 实体
- 在 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;
}
}