クラス AbstractCursorItemReader<T>
- 実装されているすべてのインターフェース:
ItemReader<T>、ItemStream、ItemStreamReader<T>、org.springframework.beans.factory.InitializingBean
- 既知の直属サブクラス
JdbcCursorItemReader,StoredProcedureItemReader
データベースカーソルを開き、ResultSet の次の行を継続的に取得する単純なアイテムリーダーの抽象基本クラス。
デフォルトでは、カーソルは別の接続を使用して開かれます。カーソルの ResultSet は、周囲のトランザクションでのコミットやロールバックに関係なく開いたままになります。このリーダーのクライアントは、ロールバックで再提示する必要がある場合にアイテムをバッファリングする責任があります。このバッファリングは、提供されているステップ実装によって処理され、独自のステップ実装を記述している人にとってのみ問題になります。
オプションがあります(カーソルに使用される接続を残りのステップ処理と共有する setUseSharedExtendedConnection(boolean)。このフラグを true に設定する場合、DataSource を ExtendedConnectionDataSourceProxy にラップして、接続が閉じられて解放されるのを防ぐ必要があります。コミットはステップ処理の一部として実行されます。カーソルは "HOLD_CURSORS_OVER_COMMIT" の追加オプションを有効にして開かれるため、JDBC 3.0 以降をサポートする JDBC ドライバーも使用する必要があります。
AbstractItemCountingItemStreamItemReader.read() を呼び出すたびに、ResultSet の現在の位置にある行がマップされます。現在、next() への呼び出しを抑制する ResultSet の折り返しはありません。ただし、RowMapper が(誤って)現在の行をインクリメントする場合、次に read を呼び出すと、現在の行が予期した位置にあることが確認され、そうでない場合は DataAccessException がスローされます。ResultSet でこのような厳格な理由は、トランザクションの制御と再起動性を維持する必要があるためです。これにより、AbstractItemCountingItemStreamItemReader.read() を呼び出すたびに、ロールバックや再起動に関係なく、正しい行で ResultSet が返されます。
ExecutionContext : 現在の行はリスタートデータとして返され、同じデータから復元されると、カーソルが開かれ、現在の行がリスタートデータ内の値に設定されます。再起動のパフォーマンスを改善するには、setDriverSupportsAbsolute(boolean) を参照してください。
この ItemStream で close を呼び出すと、現在使用しているすべてのリソースが解放されます。(接続、ResultSet など)。その後、AbstractItemCountingItemStreamItemReader.read() が再び開かれるまで、再度呼び出すことは不正です。
既知の制限: Derby と一緒に使用する場合、setVerifyCursorPosition(boolean) は false である必要があります。これは、カーソル位置の検証に使用される ResultSet.getRow() 呼び出しが "TYPE_FORWARD_ONLY" 結果セットで使用できないためです。
サブクラスは本質的にスレッドセーフではありません。
- 作成者:
- Lucas Ward, Peter Zozom, Robert Kasanicky, Thomas Risberg, Michael Minella, Mahmoud Ben Hassine
フィールドのサマリー
フィールド修飾子と型フィールド説明protected final org.apache.commons.logging.Logサブクラスで利用可能なロガーprotected ResultSetSEstatic final intコンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明void必須プロパティが設定されていることを確認します。protected void指定された JDBC ステートメント(または PreparedStatement または CallableStatement)を準備し、フェッチサイズ、最大行、クエリタイムアウトなどのステートメント設定を適用します。protected abstract voidcleanupOnClose(ConnectionSE connection) リソースをクリーンアップします。protected voiddoClose()カーソルとデータベース接続を閉じます。protected voiddoOpen()ステートメントを実行してカーソルを開きます。protected TdoRead()次の行を読み取って項目にマップし、setVerifyCursorPosition(boolean)が true の場合はカーソル位置を確認します。データソースのパブリック getter。protected org.springframework.jdbc.support.SQLExceptionTranslator何も設定されていない場合、指定された DataSource のデフォルトの SQLErrorCodeSQLExceptionTranslator を作成します。abstract StringSEgetSql()protected voidhandleWarnings(StatementSE statement) 警告を無視していない場合は SQLWarningException をスローし、それ以外の場合は(デバッグレベルで)警告をログに記録します。protected voidbooleanprotected voidjumpToItem(int itemIndex) 可能な場合はResultSet.absolute(int)SE を使用し、そうでない場合はResultSet.next()を呼び出してスクロールします。protected abstract voidopenCursor(ConnectionSE con) protected abstract TreadCursor(ResultSetSE rs, int currentRow) カーソルを読み取り、このリーダーが返すオブジェクトの型にマッピングします。voidsetConnectionAutoCommit(boolean autoCommit) カーソルが使用する接続に対して "autoCommit" をオーバーライドするかどうかを設定します。voidsetDataSource(DataSourceSE dataSource) インジェクション用のデータソース用のパブリック setter。voidsetDriverSupportsAbsolute(boolean driverSupportsAbsolute) JDBC ドライバーがResultSetSE で絶対行の設定をサポートするかどうかを示します。voidsetFetchSize(int fetchSize) このResultSetオブジェクトにさらに行が必要な場合に、データベースからフェッチする行数に関するヒントを JDBC ドライバーに提供します。voidsetIgnoreWarnings(boolean ignoreWarnings) SQLWarnings を無視するか(ログのみ)、例外をスローするかを設定します。voidsetMaxRows(int maxRows) 任意のResultSetオブジェクトが含むことができる行の最大数の制限を、指定された数に設定します。voidsetQueryTimeout(int queryTimeout) ドライバーがStatementオブジェクトの実行を待機する秒数を、指定された秒数に設定します。voidsetUseSharedExtendedConnection(boolean useSharedExtendedConnection) カーソルに使用される接続を他のすべての処理で使用する必要があるかどうかを示し、同じトランザクションを共有します。voidsetVerifyCursorPosition(boolean verifyCursorPosition) 現在の行が RowMapper または RowCallbackHandler によって処理された後のカーソル位置の検証を許可します。protected org.springframework.dao.DataAccessExceptiontranslateSqlException(StringSE task, StringSE sql, SQLExceptionSE ex) クラス org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader から継承されたメソッド
close, getCurrentItemCount, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setSaveState, updateクラス org.springframework.batch.item.ItemStreamSupport から継承されたメソッド
getExecutionContextKey, getName, setExecutionContextName, setName
フィールドの詳細
log
protected final org.apache.commons.logging.Log logサブクラスで利用可能なロガーVALUE_NOT_SET
public static final int VALUE_NOT_SET- 関連事項:
rs
コンストラクターの詳細
AbstractCursorItemReader
public AbstractCursorItemReader()
メソッドの詳細
afterPropertiesSet
必須プロパティが設定されていることを確認します。- 次で指定:
- インターフェース
org.springframework.beans.factory.InitializingBeanのafterPropertiesSet - 例外:
IllegalArgumentExceptionSE- データソースまたは SQL プロパティが設定されていない場合。ExceptionSE
setDataSource
インジェクション用のデータソース用のパブリック setter。- パラメーター:
dataSource- 使用するDataSourceSE
getDataSource
データソースのパブリック getter。- 戻り値:
- dataSource
applyStatementSettings
フェッチサイズ、最大行数、クエリタイムアウトなどのステートメント設定を適用して、所定の JDBC ステートメント(または PreparedStatement または CallableStatement)を準備します。@param stmt 準備する JDBC ステートメント- パラメーター:
stmt- 構成するPreparedStatementSE- 例外:
SQLExceptionSE- 提供された stmt との対話が失敗した場合- 関連事項:
getExceptionTranslator
protected org.springframework.jdbc.support.SQLExceptionTranslator getExceptionTranslator()何も設定されていない場合、指定された DataSource のデフォルトの SQLErrorCodeSQLExceptionTranslator を作成します。- 戻り値:
- このインスタンスの例外トランスレータ。
translateSqlException
protected org.springframework.dao.DataAccessException translateSqlException(StringSE task, StringSE sql, SQLExceptionSE ex) handleWarnings
protected void handleWarnings(StatementSE statement) throws org.springframework.jdbc.SQLWarningException, SQLExceptionSE 警告を無視していない場合は SQLWarningException をスローし、それ以外の場合は(デバッグレベルで)警告をログに記録します。- パラメーター:
statement- 警告がある場合、警告を取得する現在のステートメント。- 例外:
SQLExceptionSE- 指定されたステートメントとの対話が失敗した場合。org.springframework.jdbc.SQLWarningException- 関連事項:
SQLWarningException
setFetchSize
public void setFetchSize(int fetchSize) このResultSetオブジェクトにさらに行が必要な場合に、データベースからフェッチする行数に関するヒントを JDBC ドライバーに提供します。指定されたフェッチサイズがゼロの場合、JDBC ドライバーは値を無視します。- パラメーター:
fetchSize- 取得する行数- 関連事項:
setMaxRows
public void setMaxRows(int maxRows) 任意のResultSetオブジェクトが含むことができる行の最大数の制限を、指定された数に設定します。- パラメーター:
maxRows- 新しい最大行数の制限。ゼロは制限がないことを意味します- 関連事項:
setQueryTimeout
public void setQueryTimeout(int queryTimeout) ドライバーがStatementオブジェクトの実行を待機する秒数を、指定された秒数に設定します。制限を超えると、SQLExceptionがスローされます。- パラメーター:
queryTimeout- seconds 新しいクエリタイムアウト制限(秒単位)。ゼロは制限がないことを意味します- 関連事項:
setIgnoreWarnings
public void setIgnoreWarnings(boolean ignoreWarnings) SQLWarnings を無視するか(ログのみ)、例外をスローするかを設定します。- パラメーター:
ignoreWarnings- TRUE の場合、警告は無視されます
setVerifyCursorPosition
public void setVerifyCursorPosition(boolean verifyCursorPosition) 現在の行が RowMapper または RowCallbackHandler によって処理された後のカーソル位置の検証を許可します。デフォルト値は TRUE です。- パラメーター:
verifyCursorPosition- true の場合、カーソル位置が検証されます
setDriverSupportsAbsolute
public void setDriverSupportsAbsolute(boolean driverSupportsAbsolute) JDBC ドライバーがResultSetSE で絶対行の設定をサポートするかどうかを示します。ResultSet.absolute() をサポートする JDBC ドライバーでは、これをtrueに設定することをお勧めします。これは、特に大規模なデータセットの操作中にステップが失敗した場合に、パフォーマンスが向上する可能性があるためです。- パラメーター:
driverSupportsAbsolute- デフォルトでfalse- 関連事項:
setConnectionAutoCommit
public void setConnectionAutoCommit(boolean autoCommit) カーソルが使用する接続に対して "autoCommit" をオーバーライドするかどうかを設定します。設定されていない場合は、接続 / データソースのデフォルト構成がデフォルトになります。- パラメーター:
autoCommit-Connection.setAutoCommit(boolean)SE に使用される値。- 導入:
- 4.0
getSql
doClose
カーソルとデータベース接続を閉じます。cleanupOnClose を呼び出して、サブクラスが割り当てたリソースをクリーンアップできるようにします。- 次で指定:
- クラス
AbstractItemCountingItemStreamItemReader<T>のdoClose - 例外:
ExceptionSE- サブクラスがフレームワークによる解釈のためにチェック済み例外をスローできるようにします
cleanupOnClose
リソースをクリーンアップします。- パラメーター:
connection- データベースへ- 例外:
ExceptionSE- リソースをクリーンアップできない場合
doOpen
ステートメントを実行してカーソルを開きます。- 次で指定:
- クラス
AbstractItemCountingItemStreamItemReader<T>のdoOpen - 例外:
ExceptionSE- サブクラスがフレームワークによる解釈のためにチェック済み例外をスローできるようにします
initializeConnection
protected void initializeConnection()openCursor
doRead
次の行を読み取って項目にマップし、setVerifyCursorPosition(boolean)が true の場合はカーソル位置を確認します。- 次で指定:
- クラス
AbstractItemCountingItemStreamItemReader<T>のdoRead - 戻り値:
- データソースが使い果たされた場合、アイテムまたは
null - 例外:
ExceptionSE- サブクラスがフレームワークによる解釈のためにチェック済み例外をスローできるようにします
readCursor
カーソルを読み取り、このリーダーが返すオブジェクトの型にマッピングします。このメソッドはサブクラスでオーバーライドする必要があります。- パラメーター:
rs- 現在の結果セットcurrentRow- 結果セットの現在の位置- 戻り値:
- カーソル位置のマップされたオブジェクト
- 例外:
SQLExceptionSE- 現在の結果セットとの相互作用が失敗した場合
jumpToItem
可能な場合はResultSet.absolute(int)SE を使用し、そうでない場合はResultSet.next()を呼び出してスクロールします。- オーバーライド:
- クラス
AbstractItemCountingItemStreamItemReader<T>のjumpToItem - パラメーター:
itemIndex- ジャンプするアイテムのインデックス(0 ベース)。- 例外:
ExceptionSE- サブクラスがフレームワークによる解釈のためにチェック済み例外をスローできるようにします