Apache camel 未在camel简单表达式中解析日期

Apache camel 未在camel简单表达式中解析日期,apache-camel,Apache Camel,骆驼是新来的。我正在尝试将当前日期时间作为文件名的一部分。关键点在这里: .to(s"sftp://$sftpStr/&fileName=MyFile_${date:now:yyyyMMdd}.csv&noop=true") sftpStr包含相关路径。但是日期表达式在编译时抛出了一个错误。我肯定这是我在做的简单而愚蠢的事情,但我不清楚为什么这不起作用 有一件相关的事情我不明白,这可能有助于为我的困惑提供背景。我试过这个: .log(LoggingLevel.INFO, LOG

骆驼是新来的。我正在尝试将当前日期时间作为文件名的一部分。关键点在这里:

.to(s"sftp://$sftpStr/&fileName=MyFile_${date:now:yyyyMMdd}.csv&noop=true")
sftpStr包含相关路径。但是日期表达式在编译时抛出了一个错误。我肯定这是我在做的简单而愚蠢的事情,但我不清楚为什么这不起作用

有一件相关的事情我不明白,这可能有助于为我的困惑提供背景。我试过这个:

.log(LoggingLevel.INFO, LOG.getName, s"Route Started! Time = ${date:now:dd-MM-yyyy HH:mm:ss z}")
它抛出了一个错误。但是我拿走了绳子上的s标签,它工作得很好。我想s只是表示要读取下面的字符串作为一个简单表达式

重申一下,基本上只是想在文件名中捕获当前的日期/时间,我不能仅仅使用java.time.LocalDateTime.now或其他任何令人讨厌的原因来创建变量。我加入了关于日志的部分,希望能将我的困惑背景化


谢谢

在你写的声明中,我认为问题是$sftpsr。我认为这是无法解决的

如果$sftpStr是一个属性,那么您应该使用{{$sftpStr}}。 如果它是header,那么应该使用${header.sftpStr}。 我建议对文件夹和文件名都使用标题。比如:

from(...)
  ...
  .setHeader("folder", constant("the value"))
  .setHeader("CamelFileName", simple("${date:now:yyyyMMdd}"))
  .to("sftp:username:password@{{ftp.server}}/${header.folder}&noop=true");
在上面的ftp.server中,是保存SFTP主机的属性


希望这会有所帮助。

尝试使用toD而不是to。$sftpStr是有效的,但是您的建议通常是好的。我只需将字符串:.tosstp://$sftpStr/&fileName=MyFile+${date:now:yyyyMMdd}.csv&noop=true分割即可解决此问题