IBM Integration Bus Toolkit新手求助:输出文件名添加当前日期
在IBM Integration Bus Toolkit中给输出文件名追加当前日期的实现方法
嘿,刚接触IIB和Toolkit的话,这个需求其实挺容易实现的,我给你两种常用的方法,你可以根据自己的场景选:
方法一:直接在FileOutput节点配置动态文件名(最简单)
这是最直接的方式,不用额外加节点,直接在FileOutput节点里配置就行:
- 打开你的消息流,找到负责输出的FileOutput节点,双击打开配置界面。
- 在File name输入框里,不要写固定的
output.txt,而是用IIB内置的日期函数来拼接文件名,比如你要的output-20180225.txt格式,直接写:
这里的output-${DATE:DATE('yyyyMMdd')}.txt${DATE:DATE('yyyyMMdd')}会自动替换成当前系统的年月日(四位年+两位月+两位日),完全符合你的需求。 - 如果你的基础文件名不是固定的,比如需要从输入消息或者环境变量里获取,那可以把基础名和日期拼接,比如基础名存在LocalEnvironment里的话:
${LocalEnvironment.Destination.File.Name}-${DATE:DATE('yyyyMMdd')}.txt - 配置完保存消息流,部署后测试就可以看到带日期的输出文件了。
方法二:用Compute节点生成文件名(更灵活)
如果需要更复杂的逻辑(比如根据文件内容调整日期格式、用文件的修改日期而非当前日期),可以用Compute节点来生成完整文件名:
- 在FileInput节点之后,添加一个Compute节点。
- 双击打开Compute节点的ESQL编辑器,在
Compute代码块里添加以下逻辑:-- 获取当前日期并格式化为YYYYMMDD DECLARE currentDate CHAR DATE('yyyyMMdd'); -- 拼接成目标文件名 SET LocalEnvironment.Destination.File.Name = 'output' || '-' || currentDate || '.txt'; - 回到FileOutput节点的配置界面,在File name选项里选择
Use value from LocalEnvironment,这样就会自动使用Compute节点生成的文件名。 - 保存部署后测试即可。
一些注意事项
- 日期格式的参数是大小写敏感的,
yyyy代表四位年,MM是两位月(注意大写,小写mm是分钟),dd是两位日,别写错哦。 - 如果想用文件的修改日期而非当前系统日期,可以从FileInput节点的LocalEnvironment里获取:
LocalEnvironment.Source.File.LastModified,然后用DATEFORMAT函数转换成你需要的格式。 - 测试的时候可以用Toolkit自带的Message Flow Test Client,模拟一个文件输入,快速验证文件名是否正确生成。
内容的提问来源于stack exchange,提问作者Hervinho




