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.FlushPredicate FileExistsMode.APPEND_NO_FLUSH を使用する場合、このインターフェースの実装は、flushIfNeeded(FlushPredicate) が呼び出されたときにフラッシュしてクローズする保留中のデータがあるファイルごとに呼び出されます。 |
static interface | FileWritingMessageHandler.MessageFlushPredicate FileExistsMode.APPEND_NO_FLUSH を使用する場合、トリガーメッセージが受信されたときにフラッシュする保留中のデータがあるファイルごとに、このインターフェースの実装が呼び出されます。 |
AbstractReplyProducingMessageHandler.RequestHandler
IntegrationManagement.ManagementOverrides
messagingTemplate
EXPRESSION_PARSER, logger
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
METER_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, setRequiresReply
addNotPropagatedHeaders, createOutputMessage, getNotPropagatedHeaders, getOutputChannel, isAsync, messageBuilderForReply, produceOutput, resolveErrorChannel, sendErrorMessage, sendOutput, sendOutputs, setAsync, setNotPropagatedHeaders, setOutputChannel, setOutputChannelName, setSendTimeout, shouldCopyRequestHeaders, shouldSplitOutput, updateNotPropagatedHeaders
handleMessage, onComplete, onError, onNext, onSubscribe
buildSendTimer, destroy, getManagedName, getManagedType, getMetricsCaptor, getOrder, getOverrides, isLoggingEnabled, registerMetricsCaptor, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrack
afterPropertiesSet, 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, toString
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, waitSE, waitSE, waitSE
getThisAs
getBeanName, getComponentName
public 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
では、ファイルが存在する場合、最後に変更されたタイムスタンプがソースと異なる場合にのみ置き換えられます。それ以外の場合、書き込みは無視されます。File
SE ペイロードの場合、File
SE の実際のタイムスタンプが比較されます。他のペイロードの場合、FileHeaders.SET_MODIFIED
は既存のファイルと比較されます。ヘッダーがないか、その値が Number
SE ではない場合、ファイルは常に置き換えられます。このモードは通常、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)
File
SE の場合、ペイロードの lastModified
時刻が宛先ファイルに転送されます。他のペイロードの場合、FileHeaders.SET_MODIFIED
ヘッダーが存在する場合はそれが使用され、Number
SE です。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
- 新しいファイルが作成されたときに呼び出される BiConsumer
SE コールバック。public StringSE getComponentType()
IntegrationObjectSupport
NamedComponent
の getComponentType
MessageHandlerSupport
の getComponentType
public IntegrationPatternType getIntegrationPatternType()
IntegrationPattern
IntegrationPattern
の getIntegrationPatternType
AbstractReplyProducingMessageHandler
の getIntegrationPatternType
IntegrationPatternType
protected 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)
AbstractReplyProducingMessageHandler
AbstractReplyProducingMessageHandler
の handleRequestMessage
requestMessage
- リクエストメッセージ。null
protected 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 に一致する正規表現 ( String
SE または Pattern
SE ) である必要があります。ただし、カスタム 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.FlushPredicate
public void flushIfNeeded(FileWritingMessageHandler.MessageFlushPredicate flushPredicate, Message<?> filterMessage)
FileExistsMode.APPEND_NO_FLUSH
を使用する場合、このメソッドを呼び出して、開いているファイルを選択的にフラッシュして閉じることができます。開いているファイルごとに、指定された FileWritingMessageHandler.MessageFlushPredicate.shouldFlush(String, long, long, Message)
メソッドが呼び出され、true が返された場合、ファイルがフラッシュされます。flushPredicate
- FileWritingMessageHandler.MessageFlushPredicate
filterMessage
- 述語に渡されるオプションのメッセージ。