| 
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.springframework.batch.item.ExecutionContextUserSupport
org.springframework.batch.item.database.JdbcCursorItemReader
public class JdbcCursorItemReader
Simple item reader that opens a JDBC cursor and continually retrieves the next row in the ResultSet. It is extremely important to note that the JdbcDriver used must be version 3.0 or higher. This is because earlier versions do not support holding a ResultSet open over commits.
 Each call to read() will call the provided RowMapper, passing in the
 ResultSet. There is currently no wrapping of the ResultSet to suppress calls
 to next(). However, if the RowMapper (mistakenly) increments the current row,
 the next call to read will verify that the current row is at the expected
 position and throw a DataAccessException if it is not. This means that, in
 theory, a RowMapper could read ahead, as long as it returns the row back to
 the correct position before returning. The reason for such strictness on the
 ResultSet is due to the need to maintain control for transactions,
 restartability and skippability. This ensures that each call to
 read() returns the ResultSet at the correct line, regardless of
 rollbacks, restarts, or skips.
 
 ExecutionContext: The current row is returned as restart data, and
 when restored from that same data, the cursor is opened and the current row
 set to the value within the restart data. Two values are stored: the current
 line being processed and the number of lines that have been skipped.
 
 Transactions: The same ResultSet is held open regardless of commits or roll
 backs in a surrounding transaction. This means that when such a transaction
 is committed, the input source is notified through the mark() and
 reset() so that it can save it's current row number. Later, if the
 transaction is rolled back, the current row can be moved back to the same row
 number as it was on when commit was called.
 
 Calling skip will indicate that a record is bad and should not be
 re-presented to the user if the transaction is rolled back. For example, if
 row 2 is read in, and found to be bad, calling skip will inform the
 ItemReader. If reading is then continued, and a rollback is
 necessary because of an error on output, the input source will be returned to
 row 1. Calling read while on row 1 will move the current row to 3, not 2,
 because 2 has been marked as skipped.
 
 Calling close on this ItemStream will cause all resources it is
 currently using to be freed. (Connection, ResultSet, etc). It is then illegal
 to call read() again until it has been opened.
 
 Known limitation: when used with Derby
 setVerifyCursorPosition(boolean) needs to be false
 because ResultSet.getRow() call used for cursor position verification
 throws an exception.
 
| Field Summary | |
|---|---|
protected  ResultSet | 
rs
 | 
static int | 
VALUE_NOT_SET
 | 
| Constructor Summary | |
|---|---|
JdbcCursorItemReader()
 | 
|
| Method Summary | |
|---|---|
 void | 
afterPropertiesSet()
Assert that mandatory properties are set.  | 
 void | 
close(ExecutionContext executionContext)
Close this input source.  | 
 long | 
getCurrentProcessedRow()
 | 
protected  SQLExceptionTranslator | 
getExceptionTranslator()
 | 
 void | 
mark()
Mark the current row.  | 
 void | 
open(ExecutionContext context)
Open the stream for the provided ExecutionContext. | 
 Object | 
read()
Increment the cursor to the next row, validating the cursor position and passing the resultset to the RowMapper.  | 
 void | 
reset()
Set the ResultSet's current row to the last marked position.  | 
 void | 
setDataSource(DataSource dataSource)
Public setter for the data source for injection purposes.  | 
 void | 
setFetchSize(int fetchSize)
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. | 
 void | 
setIgnoreWarnings(boolean ignoreWarnings)
Set whether SQLWarnings should be ignored (only logged) or exception should be thrown.  | 
 void | 
setMapper(RowMapper mapper)
Set the RowMapper to be used for all calls to read().  | 
 void | 
setMaxRows(int maxRows)
Sets the limit for the maximum number of rows that any ResultSet object can contain to the given number. | 
 void | 
setPreparedStatementSetter(PreparedStatementSetter preparedStatementSetter)
Set the PreparedStatementSetter to use if any parameter values that need to be set in the supplied query.  | 
 void | 
setQueryTimeout(int queryTimeout)
Sets the number of seconds the driver will wait for a Statement object to execute to the given number of
 seconds. | 
 void | 
setSaveState(boolean saveState)
Set whether this ItemReader should save it's state in the
 ExecutionContext or not | 
 void | 
setSql(String sql)
Set the sql statement to be used when creating the cursor.  | 
 void | 
setVerifyCursorPosition(boolean verifyCursorPosition)
Allow verification of cursor position after current row is processed by RowMapper or RowCallbackHandler.  | 
 void | 
update(ExecutionContext executionContext)
Indicates that the execution context provided during open is about to be saved.  | 
| Methods inherited from class org.springframework.batch.item.ExecutionContextUserSupport | 
|---|
getKey, setName | 
| Methods inherited from class java.lang.Object | 
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
| Field Detail | 
|---|
public static final int VALUE_NOT_SET
protected ResultSet rs
| Constructor Detail | 
|---|
public JdbcCursorItemReader()
| Method Detail | 
|---|
public void afterPropertiesSet()
                        throws Exception
afterPropertiesSet in interface InitializingBeanIllegalArgumentException - if either data source or sql properties
 not set.
Exceptionpublic void setDataSource(DataSource dataSource)
dataSource - 
public Object read()
            throws Exception
read in interface ItemReaderDataAccessException
Exception - if an underlying resource is unavailable.public long getCurrentProcessedRow()
public void mark()
mark in interface ItemReader
public void reset()
           throws ResetFailedException
reset in interface ItemReaderDataAccessException
ResetFailedException - if there is a problem with the reset. If a
 reset fails inside a transaction, it would normally be fatal, and would
 leave the stream in an inconsistent state. So while this is an unchecked
 exception, it may be important for a client to catch it explicitly.public void close(ExecutionContext executionContext)
close in interface ItemStreamexecutionContext - TODOItemStream.close(ExecutionContext)protected SQLExceptionTranslator getExceptionTranslator()
public void update(ExecutionContext executionContext)
ItemStream
update in interface ItemStreamexecutionContext - to be updatedpublic void open(ExecutionContext context)
ItemStreamExecutionContext.
open in interface ItemStreampublic void setFetchSize(int fetchSize)
ResultSet object. If the fetch size specified is zero, the
 JDBC driver ignores the value.
fetchSize - the number of rows to fetchResultSet.setFetchSize(int)public void setMaxRows(int maxRows)
ResultSet object can contain to the given number.
maxRows - the new max rows limit; zero means there is no limitStatement.setMaxRows(int)public void setQueryTimeout(int queryTimeout)
Statement object to execute to the given number of
 seconds. If the limit is exceeded, an SQLException is
 thrown.
queryTimeout - seconds the new query timeout limit in seconds; zero
 means there is no limitStatement.setQueryTimeout(int)public void setIgnoreWarnings(boolean ignoreWarnings)
ignoreWarnings - if TRUE, warnings are ignoredpublic void setVerifyCursorPosition(boolean verifyCursorPosition)
verifyCursorPosition - if true, cursor position is verifiedpublic void setMapper(RowMapper mapper)
mapper - public void setSql(String sql)
sql - public void setPreparedStatementSetter(PreparedStatementSetter preparedStatementSetter)
preparedStatementSetter - public void setSaveState(boolean saveState)
ItemReader should save it's state in the
 ExecutionContext or not
saveState - 
  | 
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||