Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Spring集成DSL的中间流文件源_Spring_Spring Integration_Spring Integration Dsl - Fatal编程技术网

使用Spring集成DSL的中间流文件源

使用Spring集成DSL的中间流文件源,spring,spring-integration,spring-integration-dsl,Spring,Spring Integration,Spring Integration Dsl,我需要创建一个流,每当在一个文件夹中接收到一个文件时,它就会从另一个文件夹中拾取一些其他预先存在的文件,使用相同的转换器转换所有文件(包括新接收的文件),然后聚合它们以创建单个输出。 我想我可以使用拆分器-聚合器方法来完成转换和聚合步骤;但我不知道可以使用什么SI组件类型(如果有的话)将新文件(从启动流执行的原始MessageSource接收的文件)与同一流中的现有文件合并 我正在使用的项目使用 Spring集成-CARE-5.0.11.发布< /COD>和 Spring集成-FIEL5.0.1

我需要创建一个流,每当在一个文件夹中接收到一个文件时,它就会从另一个文件夹中拾取一些其他预先存在的文件,使用相同的
转换器转换所有文件(包括新接收的文件),然后聚合它们以创建单个输出。
我想我可以使用
拆分器
-
聚合器
方法来完成转换和聚合步骤;但我不知道可以使用什么SI组件类型(如果有的话)将新文件(从启动流执行的原始
MessageSource
接收的文件)与同一流中的现有文件合并


我正在使用的项目使用<代码> Spring集成-CARE-5.0.11.发布< /COD>和<代码> Spring集成-FIEL5.0.11.发布< /代码>,我们使用Spring集成DSL创建流.请/P> < P>请考虑使用A.code>.enrich()

EIP方法:

/**
 * 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) {
/**
*填充{@link org.springframework.integration.transformer.ContentEnricher}
*到当前集成流位置
*提供选项。
*通常与Java 8 Lambda表达式一起使用:
* 
*{@code
*.enrich(e->e.requestChannel(“enrichChannel”)
*.requestPayload(消息::getPayload)
*.shouldClonePayload(错误)
*.AutoStart(错误)
*.headerFunction(“foo”,m->m.getPayload().get(“name”))
* }
* 
*@param enricherConfigurer要提供的{@link Consumer}
*{@link org.springframework.integration.transformer.ContentEnricher}选项。
*@返回当前的{@link IntegrationFlowDefinition}。
*@见恩里克
*/
公共B丰富(消费者丰富配置器){
这样,您可以根据请求消息调用所需的任何内容,并将所有内容存储在输出有效负载中

请参阅中有关
Enricher
的更多信息

您还可以查看。我知道其中一个在XML配置中,但原理是一样的

更新

为此,您需要将请求
文件
包装到
集合
列表
,当然)以及您只需使用一个简单的
addAll()
表达式添加到此集合中的所有其他文件中


另一个更好的解决方案是使用
.gateway()
。因此,您可以将您的文件发送到那里,然后与其他人一起返回一个
集合
。这样,您的流程应该足够顺畅,只需处理上游的一个文件和下游的集合。

谢谢,Artem。关于这一点,我有两个问题:1.使用
。enrich
来更改工资单是否被视为惯用方法d类型?(由于
.increment
的输入是
文件
,输出是
集合
),那么,在调用
increment()之前,您可以将请求文件包装到
集合
,但是的:我同意这不是一个完美的解决方案。我会很快编辑我的答案…谢谢!这更清楚了。我的最后一个问题是:我应该自己在一个bean上进行多文件寻源,还是有办法插入一个
文件。inboundAdapter
在网关本身处理多个文件?因为我找到了引用来自,但似乎已经过时。好吧,我认为这是完全不同的情况。您只需要使用标准Java IO(或NIO)API获取一个文件列表。您已经轮询了该文件,并且基于该文件,您需要实现一些简单的服务激活器(
.handle()
)根据轮询的文件获取其他文件。太好了。我想是这样,但只是想检查SI API中是否有其他方法用于这种情况。我发现我可以使用
MessageHandlers
Transformers
,实现许多事情;但在许多情况下,SI有一个适用于那些功能更丰富的情况的适当API(并且经过了战斗测试!),所以我试图避免重新实现轮子。标记为已接受!