我需要创建一个流,每当在文件夹中接收到文件时,它就会从不同的文件夹中拾取其他一些先前存在的文件,并使用以下命令转换所有文件(包括新接收到的文件)相同的transformer
,然后将它们汇总以创建单个输出。
我想我可以使用splitter
-aggregator
方法来进行转换和聚合步骤;但是我不知道我可以使用哪种SI组件类型(如果有的话)将新文件(从开始执行流程执行的原始MessageSource
接收到的文件)与现有文件合并到同一文件中流。
我正在处理的项目使用spring-integration-core-5.0.11.RELEASE
和spring-integration-file-5.0.11.RELEASE
,我们正在使用Spring Integration DSL创建流。
答案 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()
。这样,您的流程就应该足够平滑,以便仅处理一个文件上游和下游的文件收集。