Spring集成 - 重用组件

时间:2017-03-02 02:02:13

标签: spring-integration

有没有办法在Spring Integration中重用@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;
}

1 个答案:

答案 0 :(得分: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注释。