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 メソッドが呼び出されたときにフラッシュされます。
| 修飾子と型 | クラスと説明 |
|---|---|
static interface | FileWritingMessageHandler.FlushPredicateFileExistsMode.APPEND_NO_FLUSH を使用する場合、このインターフェースの実装は、flushIfNeeded(FlushPredicate) が呼び出されたときにフラッシュしてクローズする保留中のデータがあるファイルごとに呼び出されます。 |
static interface | FileWritingMessageHandler.MessageFlushPredicateFileExistsMode.APPEND_NO_FLUSH を使用する場合、トリガーメッセージが受信されたときにフラッシュする保留中のデータがあるファイルごとに、このインターフェースの実装が呼び出されます。 |
AbstractReplyProducingMessageHandler.RequestHandlerIntegrationManagement.ManagementOverridesmessagingTemplateEXPRESSION_PARSER, loggerHIGHEST_PRECEDENCE, LOWEST_PRECEDENCEMETER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAME| コンストラクターと説明 |
|---|
FileWritingMessageHandler(Expression destinationDirectoryExpression)destinationDirectoryExpression を設定するコンストラクター。 |
FileWritingMessageHandler(FileSE destinationDirectory)LiteralExpression を使用して destinationDirectoryExpression を設定するコンストラクター。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected BufferedOutputStreamSE | createOutputStream(FileSE fileToWriteTo, boolean append) ファイルのバッファリングされた出力ストリームを作成します。 |
protected BufferedWriterSE | createWriter(FileSE fileToWriteTo, boolean append)String ペイロード用に、ファイルのバッファ付きライターを作成します。 |
protected void | doInit() |
void | flushIfNeeded(FileWritingMessageHandler.FlushPredicate flushPredicate)FileExistsMode.APPEND_NO_FLUSH を使用する場合、このメソッドを呼び出して、開いているファイルを選択的にフラッシュして閉じることができます。 |
void | flushIfNeeded(FileWritingMessageHandler.MessageFlushPredicate flushPredicate, Message<?> filterMessage)FileExistsMode.APPEND_NO_FLUSH を使用する場合、このメソッドを呼び出して、開いているファイルを選択的にフラッシュして閉じることができます。 |
StringSE | getComponentType() サブクラスはこのメソッドを実装して、コンポーネント型情報を提供できます。 |
IntegrationPatternType | getIntegrationPatternType() このコンポーネントが実装するパターン型を返します。 |
protected StringSE | getTemporaryFileSuffix() |
protected ObjectSE | handleRequestMessage(Message<?> requestMessage) サブクラスはこのメソッドを実装して、リクエストメッセージを処理する必要があります。 |
boolean | isRunning() |
void | setAppendNewLine(boolean appendNewLine) "true" の場合、各書き込みの後に改行が追加されます。 |
void | setAutoCreateDirectory(boolean autoCreateDirectory) 初期化時に宛先ディレクトリが存在しない場合に、それを自動的に作成するかどうかを指定します。 |
void | setBufferSize(int bufferSize) ファイルへの書き込み中に使用するバッファサイズを設定します。デフォルトは 8192 です。 |
void | setCharset(StringSE charset) 文字列ベースのメッセージペイロードからファイルを書き込むときに使用する文字セット名を設定します。 |
void | setChmod(int chmod) アップロード後にファイルのアクセス許可を設定します。 |
void | setChmodOctal(StringSE chmod)Spring XML の利便性のためのストリング setter。 |
void | setDeleteSourceFiles(boolean deleteSourceFiles) 宛先ディレクトリへの書き込み後にソースファイルを削除するかどうかを指定します。 |
void | setExpectReply(boolean expectReply) 返信メッセージが必要かどうかを指定します。 |
void | setFileExistsMode(FileExistsMode fileExistsMode) 宛先が存在する場合にどうなるかを指定する FileExistsMode を設定します。 |
void | setFileNameGenerator(FileNameGenerator fileNameGenerator) 宛先ファイルの名前を生成するときに使用する FileNameGenerator 戦略を提供します。 |
void | setFlushInterval(long flushInterval)FileExistsMode.APPEND_NO_FLUSH が使用されているときにバッファをフラッシュする頻度を設定します。 |
void | setFlushPredicate(FileWritingMessageHandler.MessageFlushPredicate flushPredicate)FileExistsMode.APPEND_NO_FLUSH が使用されているときにファイルをフラッシュするときに使用する FileWritingMessageHandler.MessageFlushPredicate を設定します。 |
void | setFlushWhenIdle(boolean flushWhenIdle)flushInterval がアイドルファイルにのみ適用されるか(デフォルト)、以前にフラッシュされたファイルまたは新しいファイルへの最初の書き込み後、その間隔でフラッシュするかを決定します。 |
void | setNewFileCallback(java.util.function.BiConsumerSE<FileSE, Message<?>> newFileCallback) 新しいファイルを作成するときに使用するコールバックを設定します。 |
protected void | setPermissions(FileSE resultFile) 新しく書き込まれたファイルに権限を設定します。 |
void | setPreserveTimestamp(boolean preserveTimestamp) 宛先ファイルのタイムスタンプを保持するには、true に設定します。 |
void | setTemporaryFileSuffix(StringSE temporaryFileSuffix) デフォルトでは、転送処理中のすべてのファイルは、追加のサフィックス(デフォルトでは ".writing" )とともにファイルシステムに表示されます。 |
void | start() |
void | stop() |
void | trigger(Message<?> message)FileExistsMode.APPEND_NO_FLUSH を使用する場合、このメソッドにメッセージを送信して、必要なファイルをフラッシュできます。 |
doInvokeAdvisedRequestHandler, getBeanClassLoader, getRequiresReply, handleMessageInternal, hasAdviceChain, onInit, setAdviceChain, setBeanClassLoader, setRequiresReplyaddNotPropagatedHeaders, createOutputMessage, getNotPropagatedHeaders, getOutputChannel, isAsync, messageBuilderForReply, produceOutput, resolveErrorChannel, sendErrorMessage, sendOutput, sendOutputs, setAsync, setNotPropagatedHeaders, setOutputChannel, setOutputChannelName, setSendTimeout, shouldCopyRequestHeaders, shouldSplitOutput, updateNotPropagatedHeadershandleMessage, onComplete, onError, onNext, onSubscribebuildSendTimer, destroy, getManagedName, getManagedType, getMetricsCaptor, getOrder, getOverrides, isLoggingEnabled, registerMetricsCaptor, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrackafterPropertiesSet, extractTypeIfPossible, generateId, getApplicationContext, getApplicationContextId, getBeanDescription, getBeanFactory, getBeanName, getChannelResolver, getComponentName, getConversionService, getExpression, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, isInitialized, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toStringcloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, waitSE, waitSE, waitSEgetThisAsgetBeanName, getComponentNamepublic FileWritingMessageHandler(FileSE destinationDirectory)
LiteralExpression を使用して destinationDirectoryExpression を設定するコンストラクター。destinationDirectory - null であってはなりません FileWritingMessageHandler(Expression)public FileWritingMessageHandler(Expression destinationDirectoryExpression)
destinationDirectoryExpression を設定するコンストラクター。destinationDirectoryExpression - null であってはなりません FileWritingMessageHandler(File)public void setAutoCreateDirectory(boolean autoCreateDirectory)
autoCreateDirectory - 必要に応じてディレクトリを作成する場合は true。public void setTemporaryFileSuffix(StringSE temporaryFileSuffix)
temporaryFileSuffix - 一時ファイルのサフィックス。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 であってはなりません setPreserveTimestamp(boolean)public void setExpectReply(boolean expectReply)
expectReply - 応答が期待される場合は true。public void setAppendNewLine(boolean appendNewLine)
appendNewLine - ペイロードが書き込まれた後に改行をファイルに書き込む必要がある場合は trueprotected StringSE getTemporaryFileSuffix()
public void setFileNameGenerator(FileNameGenerator fileNameGenerator)
FileNameGenerator 戦略を提供します。fileNameGenerator - ファイル名ジェネレーター。public void setDeleteSourceFiles(boolean deleteSourceFiles)
FileHeaders.ORIGINAL_FILE ヘッダー値がある場合にのみ効果があります。deleteSourceFiles - true の場合、ソースファイルを削除します。public void setCharset(StringSE charset)
charset - 文字セット。public void setBufferSize(int bufferSize)
bufferSize - バッファサイズ。public void setFlushInterval(long flushInterval)
FileExistsMode.APPEND_NO_FLUSH が使用されているときに、バッファーをフラッシュする頻度を設定します。間隔は概算です。実際の間隔は flushInterval と flushInterval * 1.33 の間にあり、平均は flushInterval * 1.167 です。flushInterval - 間隔。setFlushWhenIdle(boolean)public void setFlushWhenIdle(boolean flushWhenIdle)
flushInterval がアイドルファイルにのみ適用されるか(デフォルト)、以前にフラッシュされたファイルまたは新しいファイルへの最初の書き込み後、その間隔でフラッシュするかを決定します。flushWhenIdle - 閉じたファイルへの最初の書き込み後の間隔でフラッシュする場合は false。setFlushInterval(long), setBufferSize(int)public void setFlushPredicate(FileWritingMessageHandler.MessageFlushPredicate flushPredicate)
FileExistsMode.APPEND_NO_FLUSH が使用されているときにファイルをフラッシュするときに使用するように FileWritingMessageHandler.MessageFlushPredicate を設定します。trigger(Message) を参照してください。flushPredicate - 述語。public void setPreserveTimestamp(boolean preserveTimestamp)
FileSE の場合、ペイロードの lastModified 時刻が宛先ファイルに転送されます。他のペイロードの場合、FileHeaders.SET_MODIFIED ヘッダーが存在する場合はそれが使用され、NumberSE です。preserveTimestamp - preserveTimestamp を設定します。public void setChmodOctal(StringSE chmod)
chmod - 8 進数の文字列としてのアクセス許可(例: "600")。setChmod(int)public void setChmod(int chmod)
chmod - 許可。IllegalArgumentExceptionSE - 値が 0777 より大きい場合。public void setNewFileCallback(java.util.function.BiConsumerSE<FileSE,Message<?>> newFileCallback)
fileExistsMode が FileExistsMode.APPEND または FileExistsMode.APPEND_NO_FLUSH であり、新しいファイルを作成する必要がある場合にのみ呼び出されます。コールバックは、新しい結果ファイルとハンドラーをトリガーしたメッセージを受け取ります。newFileCallback - 新しいファイルが作成されたときに呼び出される BiConsumerSE コールバック。public StringSE getComponentType()
IntegrationObjectSupportNamedComponent の getComponentType MessageHandlerSupport の getComponentType public IntegrationPatternType getIntegrationPatternType()
IntegrationPatternIntegrationPattern の getIntegrationPatternType AbstractReplyProducingMessageHandler の getIntegrationPatternType IntegrationPatternTypeprotected void doInit()
AbstractReplyProducingMessageHandler の doInit public void start()
Lifecycle の start ManageableLifecycle の start public void stop()
Lifecycle の stop ManageableLifecycle の stop public boolean isRunning()
Lifecycle の isRunning ManageableLifecycle の isRunning protected ObjectSE handleRequestMessage(Message<?> requestMessage)
AbstractReplyProducingMessageHandlerAbstractReplyProducingMessageHandler の handleRequestMessage requestMessage - リクエストメッセージ。nullprotected void setPermissions(FileSE resultFile) throws IOExceptionSE
resultFile - ファイル。IOExceptionSE - すべての例外。protected BufferedWriterSE createWriter(FileSE fileToWriteTo, boolean append) throws FileNotFoundExceptionSE
fileToWriteTo - ファイル。append - 追加する場合は true。FileNotFoundExceptionSE - ファイルが存在しない場合。protected BufferedOutputStreamSE createOutputStream(FileSE fileToWriteTo, boolean append) throws FileNotFoundExceptionSE
fileToWriteTo - ファイル。append - 追加する場合は true。FileNotFoundExceptionSE - 見つからない場合。public void trigger(Message<?> message)
FileExistsMode.APPEND_NO_FLUSH を使用する場合、このメソッドにメッセージを送信して、必要なファイルをフラッシュできます。デフォルトでは、ペイロードは、処理中のファイルの absolutePath に一致する正規表現 ( StringSE または PatternSE ) である必要があります。ただし、カスタム FileWritingMessageHandler.MessageFlushPredicate が指定されている場合は、ペイロードはその実装でサポートされている任意の型にすることができます。MessageTriggerAction の trigger message - メッセージ。public void flushIfNeeded(FileWritingMessageHandler.FlushPredicate flushPredicate)
FileExistsMode.APPEND_NO_FLUSH を使用する場合、このメソッドを呼び出して、開いているファイルを選択的にフラッシュして閉じることができます。開いているファイルごとに、指定された FileWritingMessageHandler.MessageFlushPredicate.shouldFlush(String, long, long, Message) メソッドが呼び出され、true が返された場合、ファイルがフラッシュされます。flushPredicate - FileWritingMessageHandler.FlushPredicatepublic void flushIfNeeded(FileWritingMessageHandler.MessageFlushPredicate flushPredicate, Message<?> filterMessage)
FileExistsMode.APPEND_NO_FLUSH を使用する場合、このメソッドを呼び出して、開いているファイルを選択的にフラッシュして閉じることができます。開いているファイルごとに、指定された FileWritingMessageHandler.MessageFlushPredicate.shouldFlush(String, long, long, Message) メソッドが呼び出され、true が返された場合、ファイルがフラッシュされます。flushPredicate - FileWritingMessageHandler.MessageFlushPredicatefilterMessage - 述語に渡されるオプションのメッセージ。