Hybris HotFolder FTP直接导入无法创建CronJob问题排查
问题现象
直接通过FTP将文件发送至Hybris HotFolder路径时,无法创建导入CronJob,文件被移至归档文件夹且仅触发CleanupTask,相关日志如下:
Setting tenant <<master>> on the current thread Thread[task-scheduler-7,5,main] Processed CustomHeaderInitTask.execute [header=de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader@306f39fd[file=/app/hybris_commerce/hybris/data/acceleratorservices/import/master/apparel/product/processing/hotfolderFileName-jp-en-202212150552.csv,catalog=catalogName,language=ja_JP,net=false]] in 4ms Setting tenant <<master>> on the current thread Thread[task-scheduler-7,5,main] Processed ImpexTransformerTask.execute [header=de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader@306f39fd[file=/app/hybris_commerce/hybris/data/acceleratorservices/import/master/apparel/product/processing/hotfolderFileName-jp-en-202212150552.csv,catalog=catalogName,language=en,net=false]] in 4ms Setting tenant <<master>> on the current thread Thread[task-scheduler-7,5,main] Processed HotFolderImpexRunnerTask$$EnhancerBySpringCGLIB$$af2492be.execute [header=de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader@306f39fd[file=/app/hybris_commerce/hybris/data/acceleratorservices/import/master/apparel/product/processing/hotfolderFileName-jp-en-202212150552.csv,catalog=catalogName,language=en,net=false]] in 0ms Setting tenant <<master>> on the current thread Thread[task-scheduler-7,5,main] Processed CleanupTask.execute [header=de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader@306f39fd[file=/app/hybris_commerce/hybris/data/acceleratorservices/import/master/apparel/product/processing/hotfolderFileName-jp-en-202212150552.csv,catalog=catalogName,language=en,net=false]] in 1ms
但将文件发送至FTP用户主目录后,通过cp命令复制到HotFolder路径时,可成功创建CronJob并完成导入,后台可见变更;另一环境中FTP直接导入可正常工作。
核心差异点
文件写入的原子性:
FTP上传是分块流式写入,Hybris HotFolder的文件监听器可能在文件未完全上传完成时就触发处理流程,此时文件处于未完成/锁定状态,HotFolderImpexRunnerTask无法读取有效内容,直接跳过CronJob创建,仅执行后续清理。而cp命令是原子性复制操作,文件瞬间完整出现在目标目录,监听器检测到的是可用的完整文件,能正常触发导入逻辑。文件权限与所有权:
FTP上传的文件会继承FTP服务用户的权限与所有权,若和Hybris进程的运行用户权限不匹配,会导致Hybris无法读取文件内容,进而无法解析生成CronJob。cp命令复制后的文件权限会继承目标目录的配置,与Hybris进程权限一致,可正常读取处理。文件系统事件触发逻辑:
Hybris HotFolder监听器对文件系统事件的响应逻辑存在差异:FTP上传产生的是IN_CREATE类事件(文件刚创建但未写完),而本地cp操作产生的是IN_CLOSE_WRITE类事件(文件写入完成并关闭)。部分Hybris版本的监听器仅对完整写入的事件触发完整导入流程,FTP的中间事件被误判为文件已完成,导致提前处理失败。环境配置差异:
另一环境FTP直接导入正常,大概率是因为其FTP服务配置了上传后重命名机制(先传临时文件,完成后重命名到目标路径),或Hybris HotFolder配置了delayAfterCreation参数(延迟处理新文件,等待上传完成),确保Hybris只处理完全上传的文件。
内容的提问来源于stack exchange,提问作者ozkancinar

