簡體   English   中英

塊大小為n的Spring Batch作業,僅寫入第n行n次

[英]Spring Batch job with chunk size n, writes only the nth row for n times

這是我的第一個春季批處理作業,我的讀取器,處理器,編寫器在塊大小為1時正常工作。但是當我將其設為10時,它只將每10行寫入10次,而不是唯一的10行。 我知道這一定是我的bean設置方式的問題。 我嘗試用@scope(“原型”)使用我的閱讀器,但它並沒有什么不同。 我發現了這一點,但我不知道如何每次在我的讀者中獲得一個新的bean。
Spring Batch塊大小創建重復項

在此批處理配置中,在哪里/如何創建TEstLayout的新實例?

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Bean
    @Qualifier("callTestStep")
    public Step callTestStep(StepBuilderFactory stepBuilders) {
        return stepBuilders.get("callTestStep").tasklet(callTEstPgmTasklet()).build();
    }

    @Bean
    public CallTEstPgm callTEstPgmTasklet() {
        return new CallTEstPgm();
    }

    @Bean
    @Qualifier("clearOutFileStep")
    public Step clearOutFileStep(StepBuilderFactory stepBuilders) {
        return stepBuilders.get("clearOutFile").tasklet(clearOutFileTasklet()).build();
    }

    @Bean
    public ClearOutFile clearOutFileTasklet() {
        return new ClearOutFile();
    }

    // tag::readerwriterprocessor[]
    @Bean
    @Scope("prototype")
    JdbcCollectiveItemReader<TEstLayout> reader(DataSource dataSource) {
        JdbcCollectiveItemReader<TEstLayout> databaseReader = new JdbcCollectiveItemReader<>();
        databaseReader.setDataSource(dataSource);

        databaseReader
                .setSql(“select * from F33416BA order by x_id”)
);

        databaseReader.setRowMapper(new TEstMultitoOneRowMapper());
        return databaseReader;
    }

    @Bean
    public TEstProcessor processor() {
        return new TEstProcessor();
    }

    @Bean
    public JdbcBatchItemWriter<TestBalanceDetailLayout> writer(DataSource dataSource) {
        return new JdbcBatchItemWriterBuilder<TestBalanceDetailLayout>()
                .itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
                .sql("INSERT INTO " + outFileLib.trim() + "/" + outFile.trim() + " Values (:wholeDetailString)")
                .dataSource(dataSource).build();
    }

    @Bean
    public Job BalanceSummary(JobCompletionNotificationListener listener, @Qualifier("callTestStep") Step callTestStep,
            @Qualifier("clearOutFileStep") Step clearOutFileStep,
            /* Step writeHeader, */ @Qualifier("writeDetailStep") Step writeDetailStep /* , Step writeFooter */) {
        return jobBuilderFactory.get("Balance_Summary_File").incrementer(new RunIdIncrementer()).listener(listener)
                .start(callTestStep).next(clearOutFileStep)
                // .next(writeHeader)
                .next(writeDetailStep)
                // .next(writeFooter)
                .build();
    }

    @Bean
    @Qualifier("writeDetailStep")
    public Step writeDetailStep(JdbcBatchItemWriter<TestBalanceDetailLayout> writer,
            JdbcCollectiveItemReader<TEstLayout> reader, TEstProcessor processor) {
        return stepBuilderFactory.get("writeDetail").<TEstLayout, TestBalanceDetailLayout>chunk(chunkSize)
                .reader(reader).processor(processor).writer(writer).build();
    }
}

這對春豆來說不是問題! 我的壞 塊處理不斷將數據添加到數組列表,直到達到塊大小。 在我的處理器類中,我在進程方法之外創建了輸出實例。 因此,在添加到arraylist時,它一直在取代整個arraylist。

這就是我的大塊處理器發生的事情。 添加新的元素時,ArrayList的所有元素都會發生變化嗎?

以前我的處理器

  public class TestProcessor implements ItemProcessor<TestLayout, TestBalanceDetailLayout> {
                TestBalanceDetailLayout transformedDetail = new TestDetailLayout();
                @Override
            public TestBalanceDetailLayout process(final TestLayout testLayout) throws Exception {  processor code }

正確的代碼

      public class TestProcessor implements ItemProcessor<TestLayout, TestBalanceDetailLayout> {

                @Override
            public TestBalanceDetailLayout process(final TestLayout testLayout) throws Exception {
                TestBalanceDetailLayout transformedDetail = new TestDetailLayout();
processor code }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM