Spring批+完成一个步骤
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
是 运行 无限。
我的reader代码
@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();
}
}
for parseXML
,但是我的 commitSQL
代码根本没有执行。任何建议我会如何出来 parseXML
并继续 commitSQL
我认为 reader returns 列表是正确的。
Spring-Batch writer 应该包含一个 write 方法,并且位于 ItemWriter 接口的层次结构中的某个位置。从问题中给出的代码示例中看不到这一点。
也许最简单的方法是查看 Spring-Batch 手册章节。 6.7.2 关于 StaxEventItemWriter 的例子,也有很多关于这个 writer 的例子可以通过 Google.
找到
在基于块的步骤中,一旦所有输入都用完,一个步骤就被认为是完成的。这由 ItemReader
by returning null 表示。在你的 reader 的情况下,你永远不会 return null 所以它将永远 运行。
我有两个步骤
<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
是 运行 无限。
我的reader代码
@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();
}
}
for parseXML
,但是我的 commitSQL
代码根本没有执行。任何建议我会如何出来 parseXML
并继续 commitSQL
我认为 reader returns 列表是正确的。 Spring-Batch writer 应该包含一个 write 方法,并且位于 ItemWriter 接口的层次结构中的某个位置。从问题中给出的代码示例中看不到这一点。
也许最简单的方法是查看 Spring-Batch 手册章节。 6.7.2 关于 StaxEventItemWriter 的例子,也有很多关于这个 writer 的例子可以通过 Google.
找到在基于块的步骤中,一旦所有输入都用完,一个步骤就被认为是完成的。这由 ItemReader
by returning null 表示。在你的 reader 的情况下,你永远不会 return null 所以它将永远 运行。