读取多个表Spring批量ItemReader

时间:2015-08-19 18:03:09

标签: spring-batch

我想读取多个表格以从这些表格中获取少数几个字段。把它写成一个xml。 我创建了一个自定义ItemReader并有多个查询。 我有两个问题

1)我的读者进入了一个infinte循环,因为我不知道什么时候&如何返回null

2)合并来自多个表的数据的最佳方法是什么?将它发送给ItemWriter?

public class SolrTransformProductReader implements ItemReader <ProductWithPrograms> {


    @Autowired
    private JdbcTemplate jdbcTemplate;

    private String sql1 = "Select PRODUCT_CODE from product";
    private String sql2 = "Select PRODUCT_CODE, CONTRIBUTOR_ID  from product_Contributor";

    @Override
    public ProductWithPrograms read() throws Exception {

        SqlRowSet  productRows = jdbcTemplate.queryForRowSet(sql1);

        while(productRows.next()) {

            System.out.println("Product Code " + productRows.getString("PRODUCT_CODE"));
            ProductWithPrograms pp = new ProductWithPrograms();
            pp.setProduct_Code(productRows.getString("PRODUCT_CODE"));
            return pp;
        }

        return null;

    }

}

我的xml如下

<job id="SEG_SolrTransformation" xmlns="http://www.springframework.org/schema/batch">
        <batch:step id="solrProductTransformation">
            <tasklet>
                <chunk reader="solrTransformProductReader" writer="solrTransformProductWriter" commit-interval="999" />
            </tasklet>
        </batch:step>
    </job>

1 个答案:

答案 0 :(得分:0)

最好尝试使用JdbcPgingItemReader来读取数据,这是由spring批处理提供的。您可以为每个表创建多个作业的启动实例,并将它们转换为xml。

您可以指定select,from,where子句作为作业的参数