【发布时间】:2019-08-14 14:11:49
【问题描述】:
我正在尝试根据遵循此标准的文件扩展名创建一个文件 zip:filename.{NUMBER},我正在做的是读取一个文件夹,按 .{number} 分组,然后创建一个唯一的以 .num 结尾的文件 .zip,例如:
文件夹/
文件.01
文件2.01
文件.02
文件2.02
文件夹 -> /已处理
file.01.zip 其中包含 -> file.01, file2.01
file02.zip 其中包含 -> file.02, file2.02
我所做的是使用 outboundGateway,拆分文件,丰富标题读取文件扩展名,然后聚合读取该标题,但似乎无法正常工作。
public IntegrationFlow integrationFlow() {
return flow
.handle(Ftp.outboundGateway(FTPServers.PC_LOCAL.getFactory(), AbstractRemoteFileOutboundGateway.Command.MGET, "payload")
.fileExistsMode(FileExistsMode.REPLACE)
.filterFunction(ftpFile -> {
int extensionIndex = ftpFile.getName().indexOf(".");
return extensionIndex != -1 && ftpFile.getName().substring(extensionIndex).matches("\\.([0-9]*)");
})
.localDirectory(new File("/tmp")))
.split() //receiving an iterator, creates a message for each file
.enrichHeaders(headerEnricherSpec -> headerEnricherSpec.headerExpression("warehouseId", "payload.getName().substring(payload.getName().indexOf('.') +1)"))
.aggregate(aggregatorSpec -> aggregatorSpec.correlationExpression("headers['warehouseId']"))
.transform(new ZipTransformer())
.log(message -> {
log.info(message.getHeaders().toString());
return message;
});
}
它给了我一条包含所有文件的消息,我应该期待 2 条消息。
【问题讨论】:
-
我希望您什么也得不到,因为您还需要自定义发布策略。我建议第一步是打开 DEBUG 日志记录并遵循消息流。
-
我去看看,我会告诉你的,谢谢!
标签: spring spring-integration spring-integration-dsl