Class JdbcBatchItemWriter<T>

java.lang.Object
org.springframework.batch.infrastructure.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, Stefano Cordio
  • Field Details

    • logger

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

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

      protected @Nullable ItemPreparedStatementSetter<T> itemPreparedStatementSetter
    • itemSqlParameterSourceProvider

      protected @Nullable ItemSqlParameterSourceProvider<T> itemSqlParameterSourceProvider
    • sql

      protected @Nullable 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 but might be called with an empty chunk, for example when all items have been filtered by an ItemProcessor or skipped by the fault-tolerant step processing. Implementations are expected to handle empty chunks gracefully.
      Specified by:
      write in interface ItemWriter<T>
      Parameters:
      chunk - of items to be written. Never null but may be empty.
      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