Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring批处理复杂定制ItemReader_Spring_Spring Batch - Fatal编程技术网

Spring批处理复杂定制ItemReader

Spring批处理复杂定制ItemReader,spring,spring-batch,Spring,Spring Batch,我是SpringBatch的新手,我无法确定我需要为读者使用什么模式。我需要创建类WSRequestClass,并将其发送到soapweb服务 public class WSRequestClass{ private String data1; private String data2; private String data3; private String data4; private List<ClassB> dataList; }

我是SpringBatch的新手,我无法确定我需要为读者使用什么模式。我需要创建类
WSRequestClass
,并将其发送到soapweb服务

public class WSRequestClass{
    private String data1;
    private String data2;
    private String data3;
    private String data4;
    private List<ClassB> dataList;
}
我已经找到了多个simples区块模式和Tasklet的示例,但没有一个遵循这种结构。此作业使用java配置和JdbcTemplate进行查询。web服务调用的开发完成了,我唯一的问题是我必须从多个表中读取并高效地读取列表,将每个项转换为
ClassB
,并设置为
WsRequestClass


请指导我使用的模式,因为common
ItemReader
对我不起作用,我不知道如何实现自定义的reader,让我可以做我想做的事情。

我认为你的做法是错误的。批处理中有一种模式称为驱动查询模式。在其中,读者基本上读取对象的键。然后使用处理器填写附加信息。您可以在这里的Spring批处理文档中阅读有关此模式的更多信息:

谢谢!该链接非常有助于澄清要遵循的模式!我遇到的唯一障碍是,如果我调用处理器中的DAO来获取
WSRequestClass
dataList
,DAO的返回是
ClassA
的列表(我无法更改它,因为它是一个已经存在的DAO,我必须使用它),然后我将创建一个调用DAO的
ServiceImpl
,并将
List
转换为
List
,但这意味着使用For语句循环整个列表。有没有更好的方法利用spring batch来实现这一点?谢谢@Michael Minella,我正要写一个自定义阅读器,它可以读取多个表!
public class ClassA {
    private Date date;
    private BigDecimal amount1;
    private BigDecimal amount2;
    private String data;

    //getters & setters
    ...
}

public class ClassB {
    private Date date;
    private BigDecimal amount1;
    private BigDecimal amount2;
    private BigDecimal amount3;
    private BigDecimal amount4;
    private String data1;
    private String data2;

    //getters & setters
    ...
}