Spring Batch Item Reader - use skippedLinesCallback to set input field names
spring, spring-batch
Solution
You can:
- declare your DelimitedLineTokenizer bean not anonymous (call it lineTokenizer)
- in skippedLinesCallback set lineTokenizer reference as property
- in your SkippedLineCallback: split header then set as names in lineTokenizer ref setted before
Problem
I have a simple job as below: ``` <batch:step id="step"> <batch:tasklet> <batch:chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit-interval="5000" /> </batch:tasklet> </batch:step> ``` itemReader is as below: ``` <bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"> <property name="linesToSkip" value="1"></property> <property name="skippedLinesCallback" ref="skippedLinesCallback" ></property> <property name="lineMapper"> <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> <property name="lineTokenizer"> <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> <property name="delimiter" value="," /> <property name="names" value="${INPUT_FILE_FIELDS}" /> </bean> </property> <property name="fieldSetMapper"> <bean class="org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper" /> </property> </bean> </property> <property name="resource" value="#{stepExecutionContext['inputKeyName']}" /> </bean> ``` I am getting input files with a single line header. I want to set the header line as ${INPUT_FILE_FIELDS} for the reader. I am trying to achieve it using skippedLinesCallback property but got stucked in the process. Is there anyway by which I can read the header line and set it as input_fields for the reader to parse rest of the records in the file. Please suggest.