Class SynchronizedItemStreamReader<T>

  • Type Parameters:
    T - type of object being read
    All Implemented Interfaces:
    ItemReader<T>, ItemStream, ItemStreamReader<T>, org.springframework.beans.factory.InitializingBean

    public class SynchronizedItemStreamReader<T>
    extends java.lang.Object
    implements ItemStreamReader<T>, org.springframework.beans.factory.InitializingBean
    This is a simple ItemStreamReader decorator with a synchronized ItemReader.read() method - which makes a non-thread-safe ItemReader thread-safe. However, if reprocessing an item is problematic then using this will make a job not restartable. Here are some links about the motivation behind this class: - https://projects.spring.io/spring-batch/faq.html#threading-reader} - https://stackoverflow.com/a/20002493/2910265}
    Since:
    3.0.4
    Author:
    Matthew Ouyang
    • Constructor Detail

      • SynchronizedItemStreamReader

        public SynchronizedItemStreamReader()
    • Method Detail

      • read

        public T read()
               throws java.lang.Exception,
                      UnexpectedInputException,
                      ParseException,
                      NonTransientResourceException
        This delegates to the read method of the delegate
        Specified by:
        read in interface ItemReader<T>
        Returns:
        T the item to be processed or null if the data source is exhausted
        Throws:
        ParseException - if there is a problem parsing the current record (but the next one may still be valid)
        NonTransientResourceException - if there is a fatal exception in the underlying resource. After throwing this exception implementations should endeavour to return null from subsequent calls to read.
        UnexpectedInputException - if there is an uncategorised problem with the input data. Assume potentially transient, so subsequent calls to read might succeed.
        java.lang.Exception - if an there is a non-specific error.
      • close

        public void close()
        Description copied from interface: ItemStream
        If any resources are needed for the stream to operate they need to be destroyed here. Once this method has been called all other methods (except open) may throw an exception.
        Specified by:
        close in interface ItemStream
      • update

        public void update​(ExecutionContext executionContext)
        Description copied from interface: ItemStream
        Indicates that the execution context provided during open is about to be saved. If any state is remaining, but has not been put in the context, it should be added here.
        Specified by:
        update in interface ItemStream
        Parameters:
        executionContext - to be updated
      • afterPropertiesSet

        public void afterPropertiesSet()
                                throws java.lang.Exception
        Specified by:
        afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
        Throws:
        java.lang.Exception