I am sorry to insist but I test following configurations :
This one works well :
Code:
<bean id="databaseJob" parent="abstractJob">
<property name="name" value="databaseJob" />
<property name="restartable" value="true" />
<property name="steps">
<list>
<bean id="step1" parent="itemOrientedStep">
<property name="throttleLimit" value="10" />
<property name="itemReader" ref="gameFileItemReader" />
<property name="itemWriter" ref="gameItemWriter" />
</bean>
<bean id="step2" parent="itemOrientedStep">
<property name="throttleLimit" value="10" />
<property name="itemReader" ref="itemReader" />
<property name="itemWriter" ref="itemWriter" />
</bean>
</list>
</property>
</bean>
<bean id="gameFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="resource" value="classpath:/data/games.csv" />
<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="names"
value="id,year,team,week,opponent,completes,attempts,passingYards,passingTd,interceptions,rushes,rushYards,receptions,receptionYards,totalTd" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="org.springframework.batch.sample.domain.football.internal.GameFieldSetMapper" />
</property>
</bean>
</property>
</bean>
<bean id="gameItemWriter" class="org.springframework.batch.item.database.BatchSqlUpdateItemWriter">
<property name="jdbcTemplate" ref="jdbcTemplate" />
<property name="itemPreparedStatementSetter">
<bean class="org.springframework.batch.sample.domain.football.internal.GamePreparedStatementSetter" />
</property>
<property name="sql"
value="insert into GAMES (player_id, year_no, team, week, opponent,
completes, attempts, passing_yards, passing_td, interceptions,
rushes, rush_yards, receptions, receptions_yards, total_td)
VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )" />
</bean>
<bean id="itemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="jobDataSource" />
<property name="fetchSize" value="100" />
<property name="mapper">
<bean class="org.springframework.batch.sample.domain.football.internal.GameRowMapper" />
</property>
<property name="sql" value="select * from GAMES" />
<property name="verifyCursorPosition" value="false" />
</bean>
<bean id="itemWriter" class="org.springframework.batch.item.database.BatchSqlUpdateItemWriter">
<property name="jdbcTemplate" ref="jdbcTemplate" />
<property name="itemPreparedStatementSetter">
<bean class="org.springframework.batch.sample.domain.football.internal.GamePreparedStatementSetter" />
</property>
<property name="sql"
value="insert into GAMES2 (player_id, year_no, team, week, opponent,
completes, attempts, passing_yards, passing_td, interceptions,
rushes, rush_yards, receptions, receptions_yards, total_td)
VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )" />
</bean>
this one does not work and throws a ReaderNotOpenException :
Code:
<bean id="databaseJob" parent="abstractJob">
<property name="name" value="databaseJob" />
<property name="restartable" value="true" />
<property name="steps">
<list>
<bean id="step1" parent="itemOrientedStep">
<property name="throttleLimit" value="10" />
<property name="itemReader" ref="gameFileItemReader" />
<property name="itemWriter" ref="gameItemWriter" />
</bean>
<bean id="step2" parent="itemOrientedStep">
<property name="throttleLimit" value="10" />
<property name="itemReader" ref="itemReader" />
<property name="itemWriter" ref="itemWriter" />
</bean>
</list>
</property>
</bean>
<bean id="gameFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name="resource" value="classpath:/data/games.csv" />
<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="names"
value="id,year,team,week,opponent,completes,attempts,passingYards,passingTd,interceptions,rushes,rushYards,receptions,receptionYards,totalTd" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="org.springframework.batch.sample.domain.football.internal.GameFieldSetMapper" />
</property>
</bean>
</property>
</bean>
<bean id="gameItemWriter" class="org.springframework.batch.item.database.BatchSqlUpdateItemWriter" scope="step">
<property name="jdbcTemplate" ref="jdbcTemplate" />
<property name="itemPreparedStatementSetter">
<bean class="org.springframework.batch.sample.domain.football.internal.GamePreparedStatementSetter" />
</property>
<property name="sql"
value="insert into GAMES (player_id, year_no, team, week, opponent,
completes, attempts, passing_yards, passing_td, interceptions,
rushes, rush_yards, receptions, receptions_yards, total_td)
VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )" />
</bean>
<bean id="itemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step">
<property name="dataSource" ref="jobDataSource" />
<property name="fetchSize" value="100" />
<property name="mapper">
<bean class="org.springframework.batch.sample.domain.football.internal.GameRowMapper" />
</property>
<property name="sql" value="select * from GAMES" />
<property name="verifyCursorPosition" value="false" />
</bean>
<bean id="itemWriter" class="org.springframework.batch.item.database.BatchSqlUpdateItemWriter" scope="step">
<property name="jdbcTemplate" ref="jdbcTemplate" />
<property name="itemPreparedStatementSetter">
<bean class="org.springframework.batch.sample.domain.football.internal.GamePreparedStatementSetter" />
</property>
<property name="sql"
value="insert into GAMES2 (player_id, year_no, team, week, opponent,
completes, attempts, passing_yards, passing_td, interceptions,
rushes, rush_yards, receptions, receptions_yards, total_td)
VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )" />
</bean>
<bean class="org.springframework.batch.core.scope.StepScope" />
Should I open a issue on JIRA ?