2017-03-02 98 views
0

有什麼方法可以在Spring集成中重用@Transformer或其他任何組件?彈簧集成 - 重用組件

我有像下面這樣的變壓器,我想在相同的流量使用多次。我覺得我們無法做到這一點,因爲它與頻道有關。它是否正確?

@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; 
} 

回答

0

不符合該配置風格。

使用XML配置,可以從多個位置引用相同的@Transform方法(因爲通道是在XML中定義的,而不是在註釋中定義的)。

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

隨着配置的Java的DSL風格,您可以重用在多個地方的變壓器...

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

單獨註釋風格的配置,你就必須做一些像

@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); 
} 

我們目前不允許在單個方法上使用多個@Transformer批註。

+0

明白了。謝謝 –