在spring批处理作业中使用多线程步骤

时间:2013-04-10 13:24:26

标签: multithreading file-io spring-batch

我有一个弹出批处理作业,它接收平面文件,处理记录并将输出写出到另一个平面文件。 我分别使用FlatFileItemReaderFlatFileItemWriter作为读者和作者。 但是,当我尝试实现多线程步骤时,我的工作无法正常工作。我在日志文件中收到以下警告

WARN  ChunkMonitor:109 - No ItemReader set (must be concurrent step), so ignoring offset data.
WARN  ChunkMonitor:141 - ItemStream was opened in a different thread.  Restart data could be compromised.

你可以帮我实现多线程步骤吗?

1 个答案:

答案 0 :(得分:2)

这是因为FlatFileItemReader不是线程安全的,因为文档说:

/**
 * Abstract superclass for {@link ItemReader}s that supports restart by storing
 * item count in the {@link ExecutionContext} (therefore requires item ordering
 * to be preserved between runs).
 * 
 * Subclasses are inherently *not* thread-safe.
 * 
 * @author Robert Kasanicky
 */

要实现多线程阅读器,您必须编写一个同步的自定义阅读器 从ItemStream接口打开和更新的调用。如果没有,您的工作将无法安全地重新启动。

希望有所帮助

此致