2017-03-02 2 views
0

Gibt es eine Möglichkeit, @Transformer oder andere Komponenten in Spring Integration wieder zu verwenden?Spring Integration - Wiederverwendung von Komponenten

Ich habe Transformator wie unten, die ich mehrmals im gleichen Fluss verwenden möchte. Ich denke, wir können es nicht tun, da es mit dem Kanal verbunden ist. Ist das richtig?

@Transformer(inputChannel = "fileInputChannel" , outputChannel = "mappingChannel") 
public List<Map<String, String>> readFile(SLFile slfile){ 
    log.info("File Reader : " + slfile.getPath()+ slfile.getFileName()); 

    List<Map<String, String>> dataList = new ArrayList<>(); 
    CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader(); 

    File file = new File(slfile.getPath()+ slfile.getFileName()); 

    try(CSVParser parser = new CSVParser(new FileReader(file), csvFormat)){ 
     parser.getRecords().stream().map(e -> dataList.add(e.toMap())).collect(Collectors.toList()); 
     log.info(dataList); 

    } catch (IOException e) { 
     log.error("File read Error : " + e); 
    } 

    return dataList; 
} 

Antwort

0

Nicht mit dieser Art der Konfiguration.

Mit der XML-Konfiguration können Sie dieselbe Methode @Transform von mehreren Stellen aus referenzieren (da die Kanäle im XML-Code definiert sind, nicht die Annotation).

<int:transformer ... ref="myTBean" method="readFile" /> 
... 
<int:transformer ... ref="myTBean" method="readFile" /> 

Mit dem Java DSL Stil der Konfiguration können Sie den Transformator an mehreren Stellen wiederverwenden ...

... 
.transform(readFile()) 
... 
.transform(readFile()) 
... 

Mit der Annotation-Stil Konfiguration allein, würden Sie so etwas wie

zu tun haben
@Transformer(inputChannel = "fileInputChannel1" , outputChannel =  "mappingChannel1") 
public List<Map<String, String>> readFile1(SLFile slfile){ 
    return readFile(slfile); 
} 

... 

@Transformer(inputChannel = "fileInputChannelN" , outputChannel =  "mappingChannelN") 
public List<Map<String, String>> readFileN(SLFile slfile){ 
    return readFile(slfile); 
} 

Wir erlauben derzeit nicht mehrere @Transformer Annotationen auf einer einzigen Methode.

+0

Verstanden. Vielen Dank –