Java 如何访问spring批处理作业中的读取原始数据(xml或csv)

Java 如何访问spring批处理作业中的读取原始数据(xml或csv),java,spring,spring-batch,Java,Spring,Spring Batch,我有不同的导入工作来将数据导入我们的系统。由于数据来自不同的生产者,我有时会使用csv数据或不同格式的xml。这些导入类型中的每一种都有自己的spring批处理作业和自己的配置(不同的读卡器、不同的处理器,但都是同一个编写器) 我现在的任务是,我还需要系统中的“原始数据”,而不仅仅是转换的对象。因此,对于csv导入,我希望能够访问构建一个实体的原始行。在XML中,我希望原始元素为字符串。 因此,应该扩展writer,将我转换的对象DTO加上一个额外的字符串和读取的原始数据 我只是不知道如何使用S

我有不同的导入工作来将数据导入我们的系统。由于数据来自不同的生产者,我有时会使用csv数据或不同格式的xml。这些导入类型中的每一种都有自己的spring批处理作业和自己的配置(不同的读卡器、不同的处理器,但都是同一个编写器)

我现在的任务是,我还需要系统中的“原始数据”,而不仅仅是转换的对象。因此,对于csv导入,我希望能够访问构建一个实体的原始行。在XML中,我希望原始元素为字符串。 因此,应该扩展writer,将我转换的对象DTO加上一个额外的字符串和读取的原始数据

我只是不知道如何使用SpringBatch访问原始数据。我尝试了几种方法进入处理行,使用ItemReadListener#beforeRead或afterRead,但我无法访问文件中的原始数据


有什么想法可以让我看得更远吗?或者关于如何获得原始数据+转换的dto对象的提示

您不必将数据映射到域对象,您的项目可以是
String
类型

对于平面文件,您可以使用,它将逐字显示原始行:

@Bean
public FlatFileItemReader<String> itemReader() {
    return new FlatFileItemReaderBuilder<String>()
            .name("rawDataReader")
            .resource(new FileSystemResource("/absolute/path/to/your/flat/file"))
            .lineMapper(new PassThroughLineMapper())
            .build();
}

对于Jaxb,这可能会有所帮助:

“我尝试了几种方法”,然后告诉我们谢谢!我们将研究它并尝试实施它。
@Bean
public StaxEventItemReader<String> itemReader() {
    Marshaller marshaller = .. // create or inject marshaller
    // configure marshaller to unmarshal raw strings
    return new StaxEventItemReaderBuilder<String>()
            .name("rawXmlDataReader")
            .resource(new FileSystemResource("/absolute/path/to/your/xml/file"))
            .addFragmentRootElements("yourTagName")
            .unmarshaller(marshaller)
            .build();
}