multithreading - 在 Spring Batch 作业中使用多线程步骤

标签 multithreading file-io spring-batch

我有一个 Spring 批处理作业,它接收平面文件,处理记录并将输出写出到另一个平面文件。 我分别使用 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.

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

最佳答案

这是因为 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 接口(interface)调用 open 和 update。如果没有,您的作业将无法安全地重新启动。

希望对你有帮助

问候

关于multithreading - 在 Spring Batch 作业中使用多线程步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927150/

相关文章:

c - C中的线程管理

Java:LockSupport.parkNanos 与 Thread.sleep(...)

C 在二进制文件中间写入而不覆盖任何现有内容

java - 使用字节数组创建新字符串会产生奇怪的结果

java - Spring 批处理 : get list of defined jobs at runtime

java - 移动文件后找不到 FlatFileItemReader 的资源

c++ - 命名(通用)线程安全数据结构?

c++ - 将矩阵写入文件

java - "Unhandled exception type BeansException"如何解决

java - 使用套接字和线程写入文件