繁体   English   中英

春季批处理+完成一个步骤

[英]Spring batch + Complete a step

我有两个步骤

<batch:step id="parseXML" next="commitSQL">
        <batch:tasklet>
            <batch:chunk reader="bookListReader" writer="xmlBookListWriter" commit-interval="1"/>
        </batch:tasklet>
    </batch:step>
    <batch:step id="commitSQL">
        <batch:tasklet ref="databaseItemWriter"/>
    </batch:step>

我的代码没有任何问题,但是步骤commitSQL根本没有执行,只有parseXML步骤无限运行。

我的读者代码

@Override
public List<Book> read() throws Exception, UnexpectedInputException, ParseException,
        NonTransientResourceException {
    // TODO Auto-generated method stub
    System.out.println("I am reading :) :)");
    List<Book> bookList = new ArrayList<>();
    bookList.add(new Book("Java","Cay","McGrall","1234"));
    bookList.add(new Book("E Java","Cay","McGrall","1234"));
    return bookList;
}

和编写者代码

private static void convertBookListToXML(List<? extends Book> books) throws IOException {
List<Book> bookList = getBookList(books);
try {
    System.out.println("I am writer :) :)");
    JAXBContext jaxbContext = JAXBContext.newInstance(Books.class);
    Marshaller xmlMarshaller = jaxbContext.createMarshaller();
    xmlMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

    BufferedWriter writer = new BufferedWriter(new FileWriter(BOOK_FILE));
    xmlMarshaller.marshal(new Books(bookList), writer);
    writer.close();
} catch (JAXBException e) {
    e.printStackTrace();
}
}

对于parseXML ,但是我的commitSQL代码commitSQL没有执行。 任何建议我将如何提出parseXML并继续进行commitSQL

在基于块的步骤中,一旦所有输入都用完,就认为该步骤已完成。 ItemReader通过返回null来表明这一点。 就您的读者而言,您永远不会返回null,因此它将永远运行。

我认为读者会返回列表,这是正确的。 Spring-Batch编写器应包含一个write方法,并且应位于ItemWriter接口的层次结构中。 从问题中给出的代码示例中看不到这一点。

也许最简单的方法是检查Spring-Batch手册。 对于StaxEventItemWriter上的示例6.7.2,也可以通过Google找到很多关于此编写器的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM