クラス FileWritingMessageHandler

実装されたすべてのインターフェース:
org.reactivestreams.Subscriber<Message<?>>AwareBeanClassLoaderAwareBeanFactoryAwareBeanNameAwareDisposableBeanInitializingBeanApplicationContextAwareLifecycleOrderedComponentSourceAwareExpressionCapableOrderableMessageProducerHeaderPropagationAwareMessageTriggerActionIntegrationPatternNamedComponentIntegrationManagementManageableLifecycleTrackableComponentMessageHandlerreactor.core.CoreSubscriber<Message<?>>

public class FileWritingMessageHandler extends AbstractReplyProducingMessageHandler implements ManageableLifecycle, MessageTriggerAction
メッセージペイロードをファイルに書き込む MessageHandler 実装。ペイロードが File オブジェクトの場合、指定された宛先ディレクトリにファイルをコピーします。ペイロードがバイト配列、文字列、InputStream の場合、直接書き込まれます。それ以外の場合、ペイロード型はサポートされず、例外がスローされます。

各書き込みの後に改行を追加するには、appendNewLine フラグを "true" に設定します。デフォルトでは "false" です。

'deleteSourceFiles' フラグが true に設定されている場合、元のファイルは削除されます。このフラグのデフォルト値は false です。詳細については、setDeleteSourceFiles(boolean) メソッドの javadoc を参照してください。

このハンドラーの前に他のトランスフォーマーが役立つ場合があります。例: Serializable オブジェクトのペイロードは、PayloadSerializingTransformer によってバイト配列に変換できます。同様に、ObjectToStringTransformer は、toString() メソッドに基づいて任意のオブジェクトを文字列に変換できます。

FileExistsMode.APPEND は既存のファイルにコンテンツを追加します。ファイルは書き込みごとに閉じられます。FileExistsMode.APPEND_NO_FLUSH は既存のファイルにコンテンツを追加し、データをフラッシュせずにファイルを開いたままにします。データは、flushInterval に基づいて、またはメッセージが trigger(Message) メソッドに送信されたとき、または flushIfNeeded メソッドが呼び出されたときにフラッシュされます。

作成者:
Mark Fisher, Iwein Fuld, Alex Peters, Oleg Zhurakousky, Artem Bilan, Gunnar Hillert, Gary Russell, Tony Falabella, Alen Turkovic, Trung Pham, Christian Tzolov, Ngoc Nhan
  • コンストラクターの詳細

    • FileWritingMessageHandler

      public FileWritingMessageHandler(FileSE destinationDirectory)
      LiteralExpression を使用して destinationDirectoryExpression を設定するコンストラクター。
      パラメーター:
      destinationDirectory - null であってはなりません
      関連事項:
    • FileWritingMessageHandler

      public FileWritingMessageHandler(Expression destinationDirectoryExpression)
      destinationDirectoryExpression を設定するコンストラクター。
      パラメーター:
      destinationDirectoryExpression - null であってはなりません
      関連事項:
  • メソッドの詳細

    • setAutoCreateDirectory

      public void setAutoCreateDirectory(boolean autoCreateDirectory)
      初期化時に宛先ディレクトリが存在しない場合に、それを自動的に作成するかどうかを指定します。デフォルトでは、この値は true です。false に設定し、宛先ディレクトリが存在しない場合、初期化時に例外がスローされます。
      パラメーター:
      autoCreateDirectory - 必要に応じてディレクトリを作成する場合は true。
    • setTemporaryFileSuffix

      public void setTemporaryFileSuffix(StringSE temporaryFileSuffix)
      デフォルトでは、転送処理中のすべてのファイルは、追加のサフィックス(デフォルトでは ".writing" )とともにファイルシステムに表示されます。これは、このプロパティを設定することで変更できます。
      パラメーター:
      temporaryFileSuffix - 一時ファイルのサフィックス。
    • setFileExistsMode

      public void setFileExistsMode(FileExistsMode fileExistsMode)
      宛先が存在する場合にどうなるかを指定する FileExistsMode を設定します。たとえば、FileExistsMode.APPEND は、各 Message に新しいファイルを作成するのではなく、既存のファイルにデータを追加するようにこのハンドラーに指示します。

      FileExistsMode.APPEND に設定すると、アダプターは LockRegistry の実際のインスタンスも作成して、複数のスレッドが同じファイルに書き込みを行っているときに衝突が発生しないようにします。

      それ以外の場合、LockRegistry は PassThruLockRegistry に設定され、効果はありません。

      FileExistsMode.REPLACE_IF_MODIFIED では、ファイルが存在する場合、最後に変更されたタイムスタンプがソースと異なる場合にのみ置き換えられます。それ以外の場合、書き込みは無視されます。FileSE ペイロードの場合、FileSE の実際のタイムスタンプが比較されます。他のペイロードの場合、FileHeaders.SET_MODIFIED は既存のファイルと比較されます。ヘッダーがないか、その値が NumberSE ではない場合、ファイルは常に置き換えられます。このモードは通常、preserveTimestamp が true の場合にのみ意味があります。

      パラメーター:
      fileExistsMode - null であってはなりません
      関連事項:
    • setExpectReply

      public void setExpectReply(boolean expectReply)
      返信メッセージが必要かどうかを指定します。そうでない場合、このハンドラーは、成功したレスポンスの場合は単に null を返すか、失敗したレスポンスの場合は例外をスローします。デフォルトは true です。
      パラメーター:
      expectReply - 応答が期待される場合は true。
    • setAppendNewLine

      public void setAppendNewLine(boolean appendNewLine)
      'true' の場合、各書き込みの後に改行が追加されます。デフォルトでは "false" です。
      パラメーター:
      appendNewLine - ペイロードが書き込まれた後に改行をファイルに書き込む必要がある場合は true
      導入:
      4.0.7
    • getTemporaryFileSuffix

      protected StringSE getTemporaryFileSuffix()
    • setFileNameGenerator

      public void setFileNameGenerator(FileNameGenerator fileNameGenerator)
      宛先ファイルの名前を生成するときに使用する FileNameGenerator 戦略を提供します。
      パラメーター:
      fileNameGenerator - ファイル名ジェネレーター。
    • setDeleteSourceFiles

      public void setDeleteSourceFiles(boolean deleteSourceFiles)
      宛先ディレクトリへの書き込み後にソースファイルを削除するかどうかを指定します。デフォルトは false です。true に設定すると、受信メッセージにファイルペイロード、またはファイルインスタンスまたは元のファイルパスを表す文字列のいずれかを含む FileHeaders.ORIGINAL_FILE ヘッダー値がある場合にのみ効果があります。
      パラメーター:
      deleteSourceFiles - true の場合、ソースファイルを削除します。
    • setCharset

      public void setCharset(StringSE charset)
      文字列ベースのメッセージペイロードからファイルを書き込むときに使用する文字セット名を設定します。
      パラメーター:
      charset - 文字セット。
    • setBufferSize

      public void setBufferSize(int bufferSize)
      ファイルへの書き込み中に使用するバッファサイズを設定します。デフォルトは 8192 です。
      パラメーター:
      bufferSize - バッファサイズ。
      導入:
      4.3
    • setFlushInterval

      public void setFlushInterval(long flushInterval)
      FileExistsMode.APPEND_NO_FLUSH が使用されているときに、バッファーをフラッシュする頻度を設定します。間隔は概算です。実際の間隔は flushInterval と flushInterval * 1.33 の間にあり、平均は flushInterval * 1.167 です。
      パラメーター:
      flushInterval - 間隔。
      導入:
      4.3
      関連事項:
    • setFlushWhenIdle

      public void setFlushWhenIdle(boolean flushWhenIdle)
      flushInterval がアイドルファイルにのみ適用されるか(デフォルト)、以前にフラッシュされたファイルまたは新しいファイルへの最初の書き込み後、その間隔でフラッシュするかを決定します。
      パラメーター:
      flushWhenIdle - 閉じたファイルへの最初の書き込み後の間隔でフラッシュする場合は false。
      導入:
      4.3.7
      関連事項:
    • setFlushPredicate

      public void setFlushPredicate(FileWritingMessageHandler.MessageFlushPredicate flushPredicate)
      FileExistsMode.APPEND_NO_FLUSH が使用されているときにファイルをフラッシュするときに使用するように FileWritingMessageHandler.MessageFlushPredicate を設定します。trigger(Message) を参照してください。
      パラメーター:
      flushPredicate - 述語。
      導入:
      4.3
    • setPreserveTimestamp

      public void setPreserveTimestamp(boolean preserveTimestamp)
      宛先ファイルのタイムスタンプを保持するには、true に設定します。true でペイロードが FileSE の場合、ペイロードの lastModified 時刻が宛先ファイルに転送されます。他のペイロードの場合、存在する場合は FileHeaders.SET_MODIFIED ヘッダー "file_setModified" が使用され、NumberSE です。
      パラメーター:
      preserveTimestamp - preserveTimestamp を設定します。
      導入:
      4.3
    • setChmodOctal

      public void setChmodOctal(StringSE chmod)
      Spring XML の利便性のためのストリング setter。
      パラメーター:
      chmod - 8 進数の文字列としてのアクセス許可(例: "600")。
      導入:
      5.0
      関連事項:
    • setChmod

      public void setChmod(int chmod)
      アップロード後にファイルの権限を設定します。例: 所有者の読み取り / 書き込みの場合は 0600。posix ファイルのアクセス許可をサポートするファイルシステムにのみ適用されます。
      パラメーター:
      chmod - 許可。
      例外:
      IllegalArgumentExceptionSE - 値が 0777 より大きい場合。
      導入:
      5.0
    • setNewFileCallback

      public void setNewFileCallback(BiConsumerSE<FileSE,Message<?>> newFileCallback)
      新しいファイルを作成するときに使用するコールバックを設定します。このコールバックは、fileExistsMode が FileExistsMode.APPEND または FileExistsMode.APPEND_NO_FLUSH であり、新しいファイルを作成する必要がある場合にのみ呼び出されます。コールバックは、新しい結果ファイルとハンドラーをトリガーしたメッセージを受け取ります。
      パラメーター:
      newFileCallback - 新しいファイルが作成されたときに呼び出される BiConsumerSE コールバック。
      導入:
      5.1
    • getComponentType

      public StringSE getComponentType()
      クラスからコピーされた説明: IntegrationObjectSupport
      サブクラスはこのメソッドを実装して、コンポーネント型情報を提供できます。
      次で指定:
      インターフェース NamedComponentgetComponentType 
      オーバーライド:
      クラス MessageHandlerSupportgetComponentType 
    • getIntegrationPatternType

      public IntegrationPatternType getIntegrationPatternType()
      インターフェースからコピーされた説明: IntegrationPattern
      このコンポーネントが実装するパターン型を返します。
      次で指定:
      インターフェース IntegrationPatterngetIntegrationPatternType 
      オーバーライド:
      クラス AbstractReplyProducingMessageHandlergetIntegrationPatternType 
      戻り値:
      このコンポーネントが実装する IntegrationPatternType
    • doInit

      protected void doInit()
      オーバーライド:
      クラス AbstractReplyProducingMessageHandlerdoInit 
    • start

      public void start()
      次で指定:
      インターフェース Lifecyclestart 
      次で指定:
      インターフェース ManageableLifecyclestart 
    • stop

      public void stop()
      次で指定:
      インターフェース Lifecyclestop 
      次で指定:
      インターフェース ManageableLifecyclestop 
    • isRunning

      public boolean isRunning()
      次で指定:
      インターフェース LifecycleisRunning 
      次で指定:
      インターフェース ManageableLifecycleisRunning 
    • handleRequestMessage

      protected ObjectSE handleRequestMessage(Message<?> requestMessage)
      クラスからコピーされた説明: AbstractReplyProducingMessageHandler
      サブクラスはこのメソッドを実装して、リクエストメッセージを処理する必要があります。戻り値は、メッセージ、MessageBuilder、任意のプレーンオブジェクトです。基本クラスは、これらの開始点のいずれかからの返信メッセージの最終的な作成を処理します。戻り値が null の場合、メッセージフローはここで終了します。
      次で指定:
      クラス AbstractReplyProducingMessageHandlerhandleRequestMessage 
      パラメーター:
      requestMessage - リクエストメッセージ。
      戻り値:
      メッセージを処理した結果、または null
    • setPermissions

      protected void setPermissions(FileSE resultFile) throws IOExceptionSE
      新しく書き込まれたファイルに権限を設定します。
      パラメーター:
      resultFile - ファイル。
      例外:
      IOExceptionSE - すべての例外。
      導入:
      5.0
    • createWriter

      protected BufferedWriterSE createWriter(FileSE fileToWriteTo, boolean append) throws FileNotFoundExceptionSE
      String ペイロード用に、ファイルのバッファ付きライターを作成します。
      パラメーター:
      fileToWriteTo - ファイル。
      append - 追加する場合は true。
      戻り値:
      ライター。
      例外:
      FileNotFoundExceptionSE - ファイルが存在しない場合。
      導入:
      4.3.8
    • createOutputStream

      protected BufferedOutputStreamSE createOutputStream(FileSE fileToWriteTo, boolean append) throws FileNotFoundExceptionSE
      ファイルのバッファリングされた出力ストリームを作成します。
      パラメーター:
      fileToWriteTo - ファイル。
      append - 追加する場合は true。
      戻り値:
      ストリーム。
      例外:
      FileNotFoundExceptionSE - 見つからない場合。
      導入:
      4.3.8
    • trigger

      public void trigger(Message<?> message)
      FileExistsMode.APPEND_NO_FLUSH を使用する場合、このメソッドにメッセージを送信して、必要なファイルをフラッシュできます。デフォルトでは、ペイロードは、処理中のファイルの absolutePath に一致する正規表現 ( StringSE または PatternSE ) である必要があります。ただし、カスタム FileWritingMessageHandler.MessageFlushPredicate が指定されている場合は、ペイロードはその実装でサポートされている任意の型にすることができます。
      次で指定:
      インターフェース MessageTriggerActiontrigger 
      パラメーター:
      message - メッセージ。
      導入:
      4.3
    • flushIfNeeded

      public void flushIfNeeded(FileWritingMessageHandler.FlushPredicate flushPredicate)
      FileExistsMode.APPEND_NO_FLUSH を使用する場合、このメソッドを呼び出して、開いているファイルを選択的にフラッシュして閉じることができます。開いているファイルごとに、指定された FileWritingMessageHandler.MessageFlushPredicate.shouldFlush(String, long, long, Message) メソッドが呼び出され、true が返された場合、ファイルがフラッシュされます。
      パラメーター:
      flushPredicate - FileWritingMessageHandler.FlushPredicate
      導入:
      4.3
    • flushIfNeeded

      public void flushIfNeeded(FileWritingMessageHandler.MessageFlushPredicate flushPredicate, Message<?> filterMessage)
      FileExistsMode.APPEND_NO_FLUSH を使用する場合、このメソッドを呼び出して、開いているファイルを選択的にフラッシュして閉じることができます。開いているファイルごとに、指定された FileWritingMessageHandler.MessageFlushPredicate.shouldFlush(String, long, long, Message) メソッドが呼び出され、true が返された場合、ファイルがフラッシュされます。
      パラメーター:
      flushPredicate - FileWritingMessageHandler.MessageFlushPredicate
      filterMessage - 述語に渡されるオプションのメッセージ。
      導入:
      4.3