1
ファイル処理後の春の統合で処理後にファイルを移動する方法..? 私は、ファイルのポーリングを実装するためにhttp://xpadro.blogspot.com/2016/07/spring-integration-polling-file.htmlを踏襲しているが、私は処理後の春の統合移動ファイル
ファイル処理後の春の統合で処理後にファイルを移動する方法..? 私は、ファイルのポーリングを実装するためにhttp://xpadro.blogspot.com/2016/07/spring-integration-polling-file.htmlを踏襲しているが、私は処理後の春の統合移動ファイル
は、私はあなたが「取引」によって何を意味するかわからない(アウトXML構成で)するonSuccessとONERROR国境を越えたイベントを追加する必要がありますが、ファイルシステムは、一般的にトランザクションではありませんあなたは流れの最終消費者にアドバイスを追加することができます...
@SpringBootApplication
public class So40625031Application {
public static void main(String[] args) {
SpringApplication.run(So40625031Application.class, args);
}
@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from(
Files.inboundAdapter(new File("/tmp/foo")), e -> e.poller(Pollers.fixedDelay(1000)))
.transform(Transformers.fileToString())
.handle("processor", "process", e -> e.advice(advice()))
.get();
}
@Bean
public Processor processor() {
return new Processor();
}
@Bean
public AbstractRequestHandlerAdvice advice() {
return new AbstractRequestHandlerAdvice() {
@Override
protected Object doInvoke(ExecutionCallback callback, Object target, Message<?> message) throws Exception {
File file = message.getHeaders().get(FileHeaders.ORIGINAL_FILE, File.class);
try {
Object result = callback.execute();
file.renameTo(new File("/tmp/bar", file.getName()));
System.out.println("File renamed after success");
return result;
}
catch (Exception e) {
file.renameTo(new File("/tmp/baz", file.getName()));
System.out.println("File renamed after failure");
throw e;
}
}
};
}
public static class Processor {
public void process(String in) {
System.out.println(in);
}
}
}
これは私が探しているものです。解決していただきありがとうございます。 –
ファイルからJSONオブジェクトを直接読み込むために、 'Transformers.fileToString()'を 'Transformers.fromJson(My.class)'に置き換えたときにうまくいきませんでした。 JSONトランスフォーマーがファイル名ヘッダーを紛失しました。それを動作させるために、 'From(Files ...)'の直後に '.enrichHeaders(h - > h.headerExpression(FileHeaders.ORIGINAL_FILE、" payload "))'を追加しました。 –