diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcPagingItemReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcPagingItemReader.java index 5c47c9fd2..0fbc0ef7e 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcPagingItemReader.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcPagingItemReader.java @@ -57,6 +57,8 @@ import java.sql.SQLException; */ public class JdbcPagingItemReader extends AbstractPagingItemReader implements InitializingBean { + public static final int VALUE_NOT_SET = -1; + private DataSource dataSource; private PagingQueryProvider queryProvider; @@ -73,6 +75,8 @@ public class JdbcPagingItemReader extends AbstractPagingItemReader impleme private Object startAfterValue; + private int fetchSize = VALUE_NOT_SET; + public JdbcPagingItemReader() { setName(ClassUtils.getShortName(JdbcPagingItemReader.class)); } @@ -81,6 +85,19 @@ public class JdbcPagingItemReader extends AbstractPagingItemReader impleme this.dataSource = dataSource; } + /** + * Gives the JDBC driver a hint as to the number of rows that should be + * fetched from the database when more rows are needed for this + * ResultSet object. If the fetch size specified is zero, the + * JDBC driver ignores the value. + * + * @param fetchSize the number of rows to fetch + * @see ResultSet#setFetchSize(int) + */ + public void setFetchSize(int fetchSize) { + this.fetchSize = fetchSize; + } + public void setQueryProvider(PagingQueryProvider queryProvider) { this.queryProvider = queryProvider; } @@ -114,6 +131,9 @@ public class JdbcPagingItemReader extends AbstractPagingItemReader impleme super.afterPropertiesSet(); Assert.notNull(dataSource); JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); + if (fetchSize != VALUE_NOT_SET) { + jdbcTemplate.setFetchSize(fetchSize); + } jdbcTemplate.setMaxRows(pageSize); this.simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate); Assert.notNull(queryProvider); diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JdbcPagingItemReaderConfigTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JdbcPagingItemReaderConfigTests.java new file mode 100644 index 000000000..20346bb12 --- /dev/null +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JdbcPagingItemReaderConfigTests.java @@ -0,0 +1,32 @@ +package org.springframework.batch.item.database; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; + +import org.springframework.test.util.ReflectionTestUtils; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +public class JdbcPagingItemReaderConfigTests { + + @Autowired + private JdbcPagingItemReader jdbcPagingItemReder; + + @Test + public void testConfig() { + assertNotNull(jdbcPagingItemReder); + SimpleJdbcTemplate simpleJdbcTemplate = (SimpleJdbcTemplate) ReflectionTestUtils.getField(jdbcPagingItemReder, "simpleJdbcTemplate"); + JdbcTemplate jdbcTemplate = (JdbcTemplate) simpleJdbcTemplate.getJdbcOperations(); + assertEquals(1000, jdbcTemplate.getMaxRows()); + assertEquals(100, jdbcTemplate.getFetchSize()); + } + +} diff --git a/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/database/JdbcPagingItemReaderConfigTests-context.xml b/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/database/JdbcPagingItemReaderConfigTests-context.xml new file mode 100644 index 000000000..95853601f --- /dev/null +++ b/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/database/JdbcPagingItemReaderConfigTests-context.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file