小编Ore*_*ren的帖子

如何测试 Spring Batch 应用程序的整个流程?

我有一个 Spring boot + 批处理应用程序,它读取源 CSV 文件,处理它并写入目标 CSV 文件,我正在努力编写测试:使用输入 - “simpleFlowInput.csv”并比较“simpleFlowActual.csv” ” 输出带有“simpleFlowExpected.csv”文件,我想编写其中的许多测试,但很难做到这一点。

我的申请只包含一个步骤和一项工作:

@Bean("csvFileToFileStep")
public Step csvFileToFileStep() {
    return stepBuilderFactory.get("csvFileToFileStep").<RowInput, RowOutput>chunk(10000).reader(csvRowsReader()).processor(csvRowsProcessor())
            .writer(compositeItemWriter()).build();
}

@Bean("csvFileToCsvJob")
Job csvFileToCsvJob(JobCompletionNotificationListener listener) {
    return jobBuilderFactory.get("csvFileToCsvJob").incrementer(new RunIdIncrementer()).listener(listener).flow(csvFileToFileStep()).end()
            .build();
}
Run Code Online (Sandbox Code Playgroud)

我目前的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@Configuration
@EnableBatchProcessing
@SpringBootTest
public class Tester{

    @Autowired
    Job csvFileToCsvJob;
    @Autowired
    Step csvFileToFileStep;
    @Autowired
    CsvFileReadProcessAndWriteConfig csvFileReadProcessAndWriteConfig;
    private JobLauncherTestUtils jobLauncherTestUtils = new JobLauncherTestUtils();


    @Test
    public void testSimpleFlow() throws Exception {

        ClassLoader classLoader = getClass().getClassLoader();
        File fileInput = new File(classLoader.getResource("simpleFlowInput.csv").getFile());
        File fileActual = new File(classLoader.getResource("simpleFlowActual.csv").getFile());
        File fileExpected …
Run Code Online (Sandbox Code Playgroud)

java spring spring-batch

7
推荐指数
1
解决办法
1万
查看次数

如何使用 Spring Batch FlatFileItemReader 仅读取 CSV 文件中的子集列?

我有一个读者知道如何读取包含 14 列的 CSV 文件,我希望它能够接收包含许多列(~500)的文件并只读取这 14 列,我知道解决方案应该包括 FieldSetMapper (根据这个问题:read only selected columns from csv file using spring batch)但我找不到合适的例子。这是我当前的读者:

@Bean
public FlatFileItemReader<RowInput> csvRowsReader() {
    FlatFileItemReader<RowInput> reader = new FlatFileItemReader<>();
    Resource resource = new FileSystemResource(new File(FileManager.getInstance().getInputFileLocation()));
    reader.setResource(resource);

    reader.setLinesToSkip(1);
    reader.setLineMapper(new DefaultLineMapper<RowInput>(){{
        setLineTokenizer(new DelimitedLineTokenizer(){{
            setNames(new String[]{"Field_1", "Field_2", "Field_3", "Field_4", "Field_5",
                    "Field_6", "Field_7", "Field_8", "Field_9", "Field_10", "Field_11",
                    "Field_12", "Field_13", "Field_14"});
        }});
        setFieldSetMapper(new BeanWrapperFieldSetMapper<RowInput>(){{
            setTargetType(RowInput.class);
        }});
    }});


    reader.setLinesToSkip(1);
    return reader;
}
Run Code Online (Sandbox Code Playgroud)

例外的是:

引起原因:org.springframework.batch.item.file.transform.In CorrectTokenCountException:记录中找到的令牌数量不正确:预期 14 实际 544

我尝试使用的 FieldSetMapper:

    public class InputFieldSetMapper implements …
Run Code Online (Sandbox Code Playgroud)

spring spring-batch

2
推荐指数
1
解决办法
3855
查看次数

标签 统计

spring ×2

spring-batch ×2

java ×1