org.springframework.batch.support.transaction

## Class TransactionAwareBufferedWriter

- java.lang.Object
- - java.io.Writer
  - - org.springframework.batch.support.transaction.TransactionAwareBufferedWriter

- All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.Appendable, java.lang.AutoCloseable

      public class TransactionAwareBufferedWriter
      extends java.io.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

- - ### Field Summary

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

      `lock`

  - ### Constructor Summary

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

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close()`
    `void` | `flush()`
    `long` | `getBufferSize()` Convenience method for clients to determine if there is any unflushed data.
    `void` | `setEncoding(java.lang.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)`

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

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

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

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

- - ### Constructor Detail

    - #### TransactionAwareBufferedWriter

          public TransactionAwareBufferedWriter(java.nio.channels.FileChannel channel,
                                                java.lang.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 Detail

    - #### setEncoding

          public void setEncoding(java.lang.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 java.io.IOException

      Specified by:
        `close` in interface `java.io.Closeable`
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Specified by:
        `close` in class `java.io.Writer`
      Throws:
        `java.io.IOException`

    - #### flush

          public void flush()
                     throws java.io.IOException

      Specified by:
        `flush` in interface `java.io.Flushable`
      Specified by:
        `flush` in class `java.io.Writer`
      Throws:
        `java.io.IOException`

    - #### write

          public void write(char[] cbuf,
                            int off,
                            int len)
                     throws java.io.IOException

      Specified by:
        `write` in class `java.io.Writer`
      Throws:
        `java.io.IOException`