Mule ESB:File outputpattern不';不要翻译模式

Mule ESB:File outputpattern不';不要翻译模式,mule,mule-studio,mule-el,Mule,Mule Studio,Mule El,我正在使用Mule ESB CE 3.4。我需要从数据库中读取配置信息,并将其用作文件出站端点的文件名。下面是一个示例代码(代码可能不起作用,因为我只给出了一个大纲) 在数据库表中,字段名称为FilePattern,其值为“Test_User_35;[函数:datestamp:YYYYMMddhhmmss.sss]。如果我硬编码该值或将该值移动到mule配置文件 file.name=Test_User_#[function:datestamp:YYYYMMddhhmmss.sss] 并使用配置

我正在使用Mule ESB CE 3.4。我需要从数据库中读取配置信息,并将其用作文件出站端点的文件名。下面是一个示例代码(代码可能不起作用,因为我只给出了一个大纲)

在数据库表中,字段名称为FilePattern,其值为“Test_User_35;[函数:datestamp:YYYYMMddhhmmss.sss]。如果我硬编码该值或将该值移动到mule配置文件

file.name=Test_User_#[function:datestamp:YYYYMMddhhmmss.sss]
并使用配置属性语法(例如“outputpattern”中的${file.name}),它可以工作。但是,如果我从db中读取相同的数据并使用它,它将不起作用并抛出错误。记录器显示为(从数据库中读取)


非常感谢您的帮助。

如果您的邮戳格式没有变化,您应该将环境前缀存储在数据库中,并使用类似以下内容:

outputPattern="#[sessionVars['prefix']+server.dateTime.format('YYYYMMddhhmmss.sss')]"
如果需要使用当前的数据库值,可以使用基本的Java字符串方法来查找正确的子字符串。例如:

#[sessionVars['currentFeed'].getFilePattern().substring(0,sessionVars['currentFeed'].getFilePattern().indexOf('function')-2)+server.dateTime.format('YYYYMMddhhmmss.sss')]

如果使用不同的日期戳格式,也可以使用类似的字符串方法找到该部分。但是,我仍然建议您提出一个只在db中存储环境前缀的实现。

您使用的是超旧的表达式语法。试试梅尔吧。请参阅:David-我可能误解了这一点-但是我在这里如何使用它,因为实际的模式(Test_User_35;[function:datestamp:YYYYMMddhhmmss.sss])存储在db中,并且我从“outputpattern属性”中的会话变量分配此模式。我尝试了#[server.dateTime.format(#[sessionVars['currentFeed'].getFilePattern()]),但这给了我一个错误,原因很明显,模式中有一个文本('Test')。不需要嵌套表达式:
#[server.dateTime.format(sessionVars['currentFeed'].getFilePattern())]
明白了。但此表达式失败,错误消息为“异常堆栈为:1”。非法的模式字符“T”(java.lang.IllegalArgumentException)java.text.SimpleDataFormat:-1(null)”。它必须来自数据库而不是mule配置文件的原因是,此文件模式的前缀(在本例中为“Test_u2;”)会有所不同,并且会在新条目出现时进行配置。流将读取这些记录并循环它并创建这些文件。因此,我在数据库中存储的内容将指示环境,以唯一区分文件。谢谢Anton。我几乎得出了相同的结论(只存储前缀)。多亏了大卫,他的评论也为我指明了正确的方向。
$$$: Test_#[function:datestamp:YYYYMMddhhmmss.sss]    
outputPattern="#[sessionVars['prefix']+server.dateTime.format('YYYYMMddhhmmss.sss')]"
#[sessionVars['currentFeed'].getFilePattern().substring(0,sessionVars['currentFeed'].getFilePattern().indexOf('function')-2)+server.dateTime.format('YYYYMMddhhmmss.sss')]