使用Spring Integration DSL进行中流文件采购

时间:2019-06-28 16:23:14

标签: spring spring-integration spring-integration-dsl

我需要创建一个流,每当在文件夹中接收到文件时,它就会从不同的文件夹中拾取其他一些先前存在的文件,并使用以下命令转换所有文件(包括新接收到的文件)相同的transformer,然后将它们汇总以创建单个输出。 我想我可以使用splitter-aggregator方法来进行转换和聚合步骤;但是我不知道我可以使用哪种SI组件类型(如果有的话)将新文件(从开始执行流程执行的原始MessageSource接收到的文件)与现有文件合并到同一文件中流。

我正在处理的项目使用spring-integration-core-5.0.11.RELEASEspring-integration-file-5.0.11.RELEASE,我们正在使用Spring Integration DSL创建流。

1 个答案:

答案 0 :(得分:2)

请考虑使用a。 def _apply_style_to_range(self, cell_range, style): style_dict = { openpyxl.styles.Alignment: "alignment", openpyxl.styles.Border: "border", openpyxl.styles.PatternFill: "fill", openpyxl.styles.Font: "font", } attr_to_set = style_dict.get(type(style), None) if attr_to_set is None and style in Numbers.all_number_formats: attr_to_set = "number_format" if attr_to_set is None: raise ValueError('unhandled style {} unable to be applied'.format(style)) for row in self.worksheet[cell_range]: for cell in row: self.worksheet[cell.coordinate].__setattr__(attr_to_set, style) EIP方法:

.enrich()

这样,您可以根据请求消息调用所需的任何内容,并将所有内容存储在输出有效负载中。

请在Reference Manual中查看有关/** * Populate a {@link org.springframework.integration.transformer.ContentEnricher} * to the current integration flow position * with provided options. * Typically used with a Java 8 Lambda expression: * <pre class="code"> * {@code * .enrich(e -> e.requestChannel("enrichChannel") * .requestPayload(Message::getPayload) * .shouldClonePayload(false) * .autoStartup(false) * .<Map<String, String>>headerFunction("foo", m -> m.getPayload().get("name"))) * } * </pre> * @param enricherConfigurer the {@link Consumer} to provide * {@link org.springframework.integration.transformer.ContentEnricher} options. * @return the current {@link IntegrationFlowDefinition}. * @see EnricherSpec */ public B enrich(Consumer<EnricherSpec> enricherConfigurer) { 的更多信息。

您还可以查看sample。我知道一个在XML config上,但是原理是一样的。

更新

为此,您需要将请求Enricher包装到File(当然是Collection)中,然后将所有其他文件添加到一个简单的{ {1}}表达式。

另一种更好的解决方案是使用List。因此,您将文件发送到那儿,然后与其他人一起简单地返回一个addAll()。这样,您的流程就应该足够平滑,以便仅处理一个文件上游和下游的文件收集。