此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

从版本 5.5 开始,引入了 a 来涵盖启用 START/END 标记时用例的另一侧。 为方便起见,该策略实现了所有三个序列详细信息策略:FileAggregatorFileSplitterFileAggregatorSpring中文文档

  • with 属性用于关联键计算。 在 上启用标记时,它不会填充序列详细信息标头,因为 START/END 标记消息也包含在序列大小中。 仍然为发出的每一行填充 ,包括 START/END 标记消息。HeaderAttributeCorrelationStrategyFileHeaders.FILENAMEFileSplitterFileHeaders.FILENAMESpring中文文档

  • - 检查组中的消息,然后将标头值与组大小减去 - 实例进行比较。 它还实现了一个方便的触点,用于 . 有关详细信息,请参阅消息组条件FileMarkerReleaseStrategyFileSplitter.FileMarker.Mark.ENDFileHeaders.LINE_COUNT2FileSplitter.FileMarkerGroupConditionProviderconditionSupplierAbstractCorrelatingMessageHandlerSpring中文文档

  • 只是从组中删除消息,并将其余消息收集到要生成的列表有效负载中。FileAggregatingMessageGroupProcessorFileSplitter.FileMarkerSpring中文文档

以下列表显示了配置 :FileAggregatorSpring中文文档

@Bean
public IntegrationFlow fileSplitterAggregatorFlow(TaskExecutor taskExecutor) {
    return f -> f
            .split(Files.splitter()
                    .markers()
                    .firstLineAsHeader("firstLine"))
            .channel(c -> c.executor(taskExecutor))
            .filter(payload -> !(payload instanceof FileSplitter.FileMarker),
                    e -> e.discardChannel("aggregatorChannel"))
            .<String, String>transform(String::toUpperCase)
            .channel("aggregatorChannel")
            .aggregate(new FileAggregator())
            .channel(c -> c.queue("resultChannel"));
}
@Bean
fun fileSplitterAggregatorFlow(taskExecutor: TaskExecutor?) =
    integrationFlow {
        split(Files.splitter().markers().firstLineAsHeader("firstLine"))
        channel { executor(taskExecutor) }
        filter<Any>({ it !is FileMarker }) { discardChannel("aggregatorChannel") }
        transform(String::toUpperCase)
        channel("aggregatorChannel")
        aggregate(FileAggregator())
        channel { queue("resultChannel") }
    }
@serviceActivator(inputChannel="toAggregateFile")
@Bean
public AggregatorFactoryBean fileAggregator() {
    AggregatorFactoryBean aggregator = new AggregatorFactoryBean();
    aggregator.setProcessorBean(new FileAggregator());
    aggregator.setOutputChannel(outputChannel);
    return aggregator;
}
<int:chain input-channel="input" output-channel="output">
    <int-file:splitter markers="true"/>
    <int:aggregator>
        <bean class="org.springframework.integration.file.aggregator.FileAggregator"/>
    </int:aggregator>
</int:chain>

如果默认行为不满足目标逻辑,建议使用单个策略配置聚合器端点。 有关更多信息,请参阅 JavaDocs。FileAggregatorFileAggregatorSpring中文文档