FileReadingMessageSource
カスタムでを使用していますFileLocker
:
@Component
public class JdbcFileLocker implements FileLocker {
...
@Autowired
JdbcFileLocker jdbcFileLocker;
@Bean
@InboundChannelAdapter(value = "fileInputChannel", poller = @Poller(fixedDelay = "1000"))
public MessageSource<File> fileReadingMessageSource() {
FileReadingMessageSource source = new FileReadingMessageSource();
source.setDirectory(new File("/workspace/in"));
source.setFilter(new SimplePatternFileListFilter("input"));
source.getScanner().setLocker(jdbcFileLocker);
return source;
}
FileLocker jdbcFileLocker
でファイルを処理した後、を使用してファイルのロックを解除したいと思いFileWritingMessageHandler
ます。
@Bean
@ServiceActivator(inputChannel = "fileInputChannel")
public MessageHandler fileWritingMessageHandler() {
FileWritingMessageHandler fileWritingMessageHandler =
new FileWritingMessageHandler(new File("/workspace/out"));
自分でファイルのロックを解除する必要がありますか、それとも FileWritingMessageHandler@ServiceActivator
に何らかの方法で与えることができますか?FileLocker
編集:追加ExpressionEvaluatingRequestHandlerAdvice
@Bean
ExpressionEvaluatingRequestHandlerAdvice unlockAdvice() {
ExpressionEvaluatingRequestHandlerAdvice advice =
new ExpressionEvaluatingRequestHandlerAdvice();
advice.setSuccessChannel(unlockChannel);
return advice;
}
だから私はこれAdvice
を私のに追加することができますFileWritingMessageHandler
:
@Autowired
ExpressionEvaluatingRequestHandlerAdvice unlockAdvice;
@Bean
@ServiceActivator(inputChannel = "fileInputChannel")
public MessageHandler fileWritingMessageHandler() {
FileWritingMessageHandler handler =
new FileWritingMessageHandler(new File("/workspace/out"));
handler.setFileExistsMode(FileExistsMode.REPLACE);
handler.setDeleteSourceFiles(true);
handler.setExpectReply(false);
handler.setFileNameGenerator(message -> "output");
handler.setAdviceChain(List.of(unlockAdvice));
return handler;
}
ロック解除は、@ServiceActivator
をリッスンすることによって処理されunlockChannel
ます。