Spring Integration SFTP:MV操作为何不支持FileExistsMode?默认是FAIL吗?
为什么无法配置FileExistsMode?
AbstractRemoteFileOutboundGateway.Command.MV对应远程文件系统的重命名/移动操作,它底层直接委托SFTP客户端执行原生rename命令。而FileExistsMode是Spring Integration为文件写入类操作(比如PUT上传、本地文件写入远程)设计的配置项,用于在目标文件已存在时控制框架层面的处理策略。
MV操作的核心逻辑依赖SFTP服务器对rename指令的原生处理,Spring Integration当前实现没有在框架层面对目标文件的存在性做额外检查和拦截,因此也就没有暴露FileExistsMode的配置入口。
默认模式是否为FAIL?
严格来说,MV操作并没有对应FileExistsMode.FAIL的框架配置,但实际行为和FAIL效果一致:当目标路径已存在同名文件时,大多数SFTP服务器会直接返回SSH_FX_FAILURE错误,Spring Integration捕获到这个错误后会抛出异常、终止操作——这和FileExistsMode.FAIL的“目标存在则失败”表现一致。
需要注意的是,这个行为本质是SFTP服务器的默认策略,而非Spring Integration框架层面的配置控制。
后续版本是否会通过Pull Request支持该配置?
目前Spring Integration官方尚未提供MV操作的FileExistsMode配置支持,但社区存在相关需求讨论。如果有开发者提交合理的Pull Request,在框架层面对MV操作增加目标文件存在性检查,并对接FileExistsMode的策略(比如覆盖、跳过、失败等),这种增强是有机会被合并到后续版本中的。
内容的提问来源于stack exchange,提问作者Tomek Niemczak

