有没有办法在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;
}
答案 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
注释。