Class TransactionAwareBufferedWriter

java.lang.Object
java.io.Writer
org.springframework.batch.support.transaction.TransactionAwareBufferedWriter
All Implemented Interfaces:
Closeable, Flushable, Appendable, AutoCloseable

public class TransactionAwareBufferedWriter extends Writer
Wrapper for a FileChannel that delays actually writing to or closing the buffer if a transaction is active. If a transaction is detected on the call to Writer.write(String) the parameter is buffered and passed on to the underlying writer only when the transaction is committed.
Author:
Dave Syer, Michael Minella, Niels Ferguson, Mahmoud Ben Hassine
  • Constructor Details

    • TransactionAwareBufferedWriter

      public TransactionAwareBufferedWriter(FileChannel channel, Runnable closeCallback)
      Create a new instance with the underlying file channel provided, and a callback to execute on close. The callback should clean up related resources like output streams or channels.
      Parameters:
      channel - channel used to do the actual file IO
      closeCallback - callback to execute on close
  • Method Details

    • setEncoding

      public void setEncoding(String encoding)
    • setForceSync

      public void setForceSync(boolean forceSync)
      Flag to indicate that changes should be force-synced to disk on flush. Defaults to false, which means that even with a local disk changes could be lost if the OS crashes in between a write and a cache flush. Setting to true may result in slower performance for usage patterns involving many frequent writes.
      Parameters:
      forceSync - the flag value to set
    • getBufferSize

      public long getBufferSize()
      Convenience method for clients to determine if there is any unflushed data.
      Returns:
      the current size (in bytes) of unflushed buffered data
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in class Writer
      Throws:
      IOException
    • flush

      public void flush() throws IOException
      Specified by:
      flush in interface Flushable
      Specified by:
      flush in class Writer
      Throws:
      IOException
    • write

      public void write(char[] cbuf, int off, int len) throws IOException
      Specified by:
      write in class Writer
      Throws:
      IOException
    • write

      public void write(String str, int off, int len) throws IOException
      Overrides:
      write in class Writer
      Throws:
      IOException