Class JdbcBatchItemWriter<T>

java.lang.Object
org.springframework.batch.item.database.JdbcBatchItemWriter<T>
All Implemented Interfaces:
ItemWriter<T>, org.springframework.beans.factory.InitializingBean

public class JdbcBatchItemWriter<T> extends Object implements ItemWriter<T>, org.springframework.beans.factory.InitializingBean

ItemWriter that uses the batching features from NamedParameterJdbcTemplate to execute a batch of statements for all items provided.

The user must provide an SQL query and a special callback for either of ItemPreparedStatementSetter or ItemSqlParameterSourceProvider. You can use either named parameters or the traditional '?' placeholders. If you use the named parameter support then you should provide a ItemSqlParameterSourceProvider, otherwise you should provide a ItemPreparedStatementSetter. This callback would be responsible for mapping the item to the parameters needed to execute the SQL statement.
It is expected that write(Chunk) is called inside a transaction.
The writer is thread-safe after its properties are set (normal singleton behavior), so it can be used to write in multiple concurrent transactions.
Since:
2.0
Author:
Dave Syer, Thomas Risberg, Michael Minella, Mahmoud Ben Hassine
  • Field Details

    • logger

      protected static final org.apache.commons.logging.Log logger
    • namedParameterJdbcTemplate

      protected org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations namedParameterJdbcTemplate
    • itemPreparedStatementSetter

      protected ItemPreparedStatementSetter<T> itemPreparedStatementSetter
    • itemSqlParameterSourceProvider

      protected ItemSqlParameterSourceProvider<T> itemSqlParameterSourceProvider
    • sql

      protected String sql
    • assertUpdates

      protected boolean assertUpdates
    • parameterCount

      protected int parameterCount
    • usingNamedParameters

      protected boolean usingNamedParameters
  • Constructor Details

    • JdbcBatchItemWriter

      public JdbcBatchItemWriter()
  • Method Details

    • setAssertUpdates

      public void setAssertUpdates(boolean assertUpdates)
      Public setter for the flag that determines whether an assertion is made that all items cause at least one row to be updated.
      Parameters:
      assertUpdates - the flag to set. Defaults to true;
    • setSql

      public void setSql(String sql)
      Public setter for the query string to execute on write. The parameters should correspond to those known to the ItemPreparedStatementSetter.
      Parameters:
      sql - the query to set
    • setItemPreparedStatementSetter

      public void setItemPreparedStatementSetter(ItemPreparedStatementSetter<T> preparedStatementSetter)
      Public setter for the ItemPreparedStatementSetter.
      Parameters:
      preparedStatementSetter - the ItemPreparedStatementSetter to set. This is required when using traditional '?' placeholders for the SQL statement.
    • setItemSqlParameterSourceProvider

      public void setItemSqlParameterSourceProvider(ItemSqlParameterSourceProvider<T> itemSqlParameterSourceProvider)
      Public setter for the ItemSqlParameterSourceProvider.
      Parameters:
      itemSqlParameterSourceProvider - the ItemSqlParameterSourceProvider to set. This is required when using named parameters for the SQL statement and the type to be written does not implement Map.
    • setDataSource

      public void setDataSource(DataSource dataSource)
      Public setter for the data source for injection purposes.
      Parameters:
      dataSource - DataSource to use for querying against
    • setJdbcTemplate

      public void setJdbcTemplate(org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations namedParameterJdbcTemplate)
      Public setter for the NamedParameterJdbcOperations.
      Parameters:
      namedParameterJdbcTemplate - the NamedParameterJdbcOperations to set
    • afterPropertiesSet

      public void afterPropertiesSet()
      Check mandatory properties - there must be a NamedParameterJdbcOperations and an SQL statement plus a parameter source.
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
    • write

      public void write(Chunk<? extends T> chunk) throws Exception
      Description copied from interface: ItemWriter
      Process the supplied data element. Will not be called with any null items in normal operation.
      Specified by:
      write in interface ItemWriter<T>
      Parameters:
      chunk - of items to be written. Must not be null.
      Throws:
      Exception - if there are errors. The framework will catch the exception and convert or rethrow it as appropriate.
    • processUpdateCounts

      protected void processUpdateCounts(int[] updateCounts)
      Extension point to post process the update counts for each item.
      Parameters:
      updateCounts - the array of update counts for each item
      Since:
      5.1