Package org.springframework.batch.support.transaction

# 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

- ## Field Summary

  ### Fields inherited from class java.io.Writer

  `lock`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TransactionAwareBufferedWriter(FileChannel channel, Runnable closeCallback)`
  Create a new instance with the underlying file channel provided, and a callback to execute on close.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  `void`
  `flush()`
  `long`
  `getBufferSize()`
  Convenience method for clients to determine if there is any unflushed data.
  `void`
  `setEncoding(String encoding)`
  `void`
  `setForceSync(boolean forceSync)`
  Flag to indicate that changes should be force-synced to disk on flush.
  `void`
  `write(char[] cbuf, int off, int len)`
  `void`
  `write(String str, int off, int len)`

  ### Methods inherited from class java.io.Writer

  `append, append, append, nullWriter, write, write, write`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## 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`