FileWritingMessageHandlerを使用してファイルの名前を変更する簡単なテストを作成しようとしていますが、ターゲットの宛先ディレクトリを正しく指定する方法がわかりません。Spring統合を使用してインプレースでファイルの名前を変更FileWritingMessageHandler
私はディレクトリツリーを再帰的にスキャンしているので、最終的にファイルペイロードから親パスを読み込み、FileNameGeneratorを使用して名前を変更することができますが、動作するようには見えません。
DefaultFileNameGeneratorの 'payload.name'は正しく解決されますが、 'payload.path'は正しく解決されません。
ソースファイルの場所を正しく決定し、ハンドラでそのファイルを使用するにはどうすればよいですか?ここで
編集
は、ファイルをスキャンするチャネルアダプタです。再帰的スキャンを実現するには、.setUseWatchService(true)
を使用しなければなりませんでした。
@Bean
@InboundChannelAdapter(channel = "sourceFileChannel", poller = @Poller(fixedRate = "5000", maxMessagesPerPoll = "-1"))
public MessageSource<File> sourceFiles() {
CompositeFileListFilter<File> filters = new CompositeFileListFilter<>();
filters.addFilter(new SimplePatternFileListFilter(sourceFilenamePattern));
filters.addFilter(persistentFilter());
FileReadingMessageSource source = new FileReadingMessageSource();
source.setAutoCreateDirectory(true);
source.setDirectory(new File(sourceDirectory));
source.setFilter(filters);
source.setUseWatchService(true);
return source;
}
UPDATE
アルテム私は私のミスを理解して助けました。
私は、Artemで説明したようにSpelExpressionParserを使用して目的の結果を達成することができました。
キーピースビーイング: "payload.parentは" 適切にファイルの親パスに解決
new SpelExpressionParser().parseExpression("payload.parent")
。
@Bean
@ServiceActivator(inputChannel = "processingFileChannel")
public MessageHandler copyFileForProcessingOutboundChannelAdapter() {
FileWritingMessageHandler adapter = new FileWritingMessageHandler(new SpelExpressionParser().parseExpression("payload.parent"));
adapter.setDeleteSourceFiles(false);
adapter.setAutoCreateDirectory(true);
adapter.setExpectReply(false);
adapter.setFileNameGenerator(processingFileNameGenerator());
return adapter;
}
@Bean
public DefaultFileNameGenerator processingFileNameGenerator() {
DefaultFileNameGenerator defaultFileNameGenerator = new DefaultFileNameGenerator();
defaultFileNameGenerator.setExpression("'p_' + payload.name");
return defaultFileNameGenerator;
}
「再帰的にスキャンする」方法を理解するために 'source'アダプタを共有してもよろしいですか? –
多分あなたの問題はここにあります:https://jira.spring.io/browse/INT-832 –