For second page onwards, JdbcPagingItemReader is not putting values automatically for sortkey placeholder

↘锁芯ラ 提交于 2019-12-25 07:26:28

问题


I am using JdbcPagingItemReader as below,

@Bean
    public ItemReader<RemittanceVO> reader() {

        JdbcPagingItemReader<RemittanceVO> reader = new   JdbcPagingItemReader<RemittanceVO>();
        reader.setDataSource(dataSource);
        reader.setRowMapper(new RemittanceRowMapper());
        reader.setQueryProvider(queryProvider);
        reader.setPageSize(100);
        return reader;
    }


@Bean
    public PagingQueryProvider queryProvider() throws Exception{
        SqlPagingQueryProviderFactoryBean queryProviderBean= new SqlPagingQueryProviderFactoryBean();
        queryProviderBean.setDataSource(dataSource);
        queryProviderBean.setSelectClause(Constants.REMITTANCES_SELECT_CLAUSE);
        queryProviderBean.setFromClause(Constants.REMITTANCES_FROM_CLAUSE);
        queryProviderBean.setWhereClause(Constants.REMITTANCES_WHERE_CLAUSE);
        queryProviderBean.setSortKey(Constants.REMITTANCES_SORT_KEY);
        PagingQueryProvider queryProvider = queryProviderBean.getObject();
        return queryProvider;
    }

As of now, I launch job as below ( as I am very new to Spring batch )

JobLauncher jobLauncher = (JobLauncher) ctx.getBean("jobLauncher");
        Job job = (Job) ctx.getBean("runRCMatcher");

        try {
            JobExecution execution = jobLauncher.run(job, new JobParameters());
        }catch (Exception e) {
            e.printStackTrace();
        }

I am running this app as SpringBoot app. It fetches first 100 records successfully and hands over to processor and then next query fails. Query fails because sort key value has not been placed in it. This is there in query , AND ((REMIT_ID > ?)) ORDER BY REMIT_ID ASC FETCH FIRST 100 ROWS ONLY;

Where am I wrong?

My DB is DB2 so I guess it should be using - Db2PagingQueryProvider

Step & Job are defined as ,

@Bean
        public Step step1(StepBuilderFactory stepBuilderFactory,
                ItemReader<RemittanceVO> reader, ItemWriter<RemittanceClaimVO> writer,
                ItemProcessor<RemittanceVO, RemittanceClaimVO> processor) {

            return stepBuilderFactory.get("step1")
                    .<RemittanceVO, RemittanceClaimVO> chunk(100).reader(reader)
                    .processor(processor).writer(writer).build();
        }


@Bean
    public Job runRCMatcher(JobBuilderFactory jobs, Step s1) {
        return jobs.get("RCMatcher")
                .incrementer(new RunIdIncrementer())
                .flow(s1)
                .end()
                .build();
    }

Sort key specified is table column name - Constants.REMITTANCES_SORT_KEY and that is a primary key of table and of type BIGINT

来源:https://stackoverflow.com/questions/39078497/for-second-page-onwards-jdbcpagingitemreader-is-not-putting-values-automaticall

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!