anchor.diff:  ----
   <batch:job id="studentsJob" restartable="true">
   	<batch:step id="step1">
  -		<batch:tasklet transaction-manager="transactionManager">                
  -			
  +		<batch:tasklet transaction-manager="transactionManager">  
   			<batch:chunk reader="xmlItemReader" writer="databaseItemWriter"
  -				processor="itemProcessor" commit-interval="1" *skip-limit="2">
  +				processor="itemProcessor" commit-interval="1" skip-limit="2">
   				 <batch:streams>
   					<batch:stream ref="errorItemWriter"/>
   					<batch:stream ref="successItemWriter"/>
  
positive.code: ----
  
  == Usecase
  Clinet/Business wants to migrate data from a source to SQL DB. But the data is available as XML which needs to be procesed into MySQL DB.
  The below diagram explains the usecase.
  
  image::/images/flow-diagram.png[]
  
  For tracking purpose the success/failure processed entry must be written into different files. 
  
  == Configuring Batch Steps
  Spring batch uses a `chunk oriented` processing which refers to reading the data one at a time, and creating `chunks` that will be written out, with in a transaction boundary. One item is read in from an `ItemReader`, handed to an `ItemProcessor`, and aggregated. Once the number of items read equals the commit interval, the entire chunk is written out via the `ItemWriter`, and then the transaction is committed.
  
negative.code: 	</batch:listeners>
  </batch:job>
  ----
  
  There is a skip-limit attribute (value as number) which is checked on every skippable exception, and when the number is reached, the step fails.
  
  +
  NOTE: The batch:streams, batch:listeners and batch:skippable-exception-classes configuration elements are all related to the way that erroneous input records are handled.
  +
  