2016-11-16 6 views

答えて

4

は、私はあなたが「取引」によって何を意味するかわからない(アウト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); 
     } 

    } 

} 
+0

これは私が探しているものです。解決していただきありがとうございます。 –

+1

ファイルからJSONオブジェクトを直接読み込むために、 'Transformers.fileToString()'を 'Transformers.fromJson(My.class)'に置き換えたときにうまくいきませんでした。 JSONトランスフォーマーがファイル名ヘッダーを紛失しました。それを動作させるために、 'From(Files ...)'の直後に '.enrichHeaders(h - > h.headerExpression(FileHeaders.ORIGINAL_FILE、" payload "))'を追加しました。 –

関連する問題