我在Camel的路径中使用日期:
fileName=${date:now:dd-MM-yyyy}
但我现在需要的是 - 1天。这可能吗?
答案 0 :(得分:13)
好吧,不是直接的。日期:简单语言中的对象只能获取当前时间(或者您在标题中放置的某个时间值 - 您可以在java或类似文件中执行此操作。
但你也可以这样做。创建一个类:
public class YesterdayBean{
public String getYesterday(){
Calendar cal = Calendar.getInstance();
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
cal.add(Calendar.DATE, -1);
return dateFormat.format(cal.getTime());
}
}
将它连接到您的Camel(或弹簧,如果您使用它)注册表作为bean。如果您不确定如何执行此操作,请查看registry的bean和“使用”部分。
假设您在注册表中将bean命名为“昨天”, 春天:
<bean id="yesterday" class="some.package.YesterdayBean"/>
然后将它与文件组件一起使用。
.to("file:fo/bar?fileName=${bean:yesterday}")
如果这只是您需要它的一个地方,并且您正在使用Java DSL,您也可以使用Java处理器预先创建日期并将其放在标题中。
像这样:
from("file:somewhere")
.process(new Processor(){
public void process(Exchange ex){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
ex.getIn().setHeader("yesterday",cal.getTime());
}
})
.to("file:target?fileName=${date:header.yesterday:dd-MM-yyyy}");
}
答案 1 :(得分:3)
我对此很好奇,并从骆驼邮件列表中寻求帮助。事实上,您可以使用内联脚本执行所要求的操作,例如groovy。请参阅here。
我让这个为我工作:
<camelContext id="contextname">
<route id="routename">
<from uri="file://\temp\?fileName=#myGroovyExp" />
<split>
<tokenize token="(?=MSH\|)" regex="true" />
<to uri="bean:filePickupByDateTest?method=test" />
</split>
</route>
</camelContext>
<spring:bean id="myGroovyExp" class="org.apache.camel.model.language.GroovyExpression">
<spring:constructor-arg index="0" value="new Date().previous().format('MMddyy') + 'pa'" />
</spring:bean>
我的文件名是昨天:MMddyypa
您只需将脚本主体更改为:
new Date().previous().format('dd-MM-yyyy')
当然,你需要在你的道路上使用camel-groovy(或者你使用的任何脚本)。
答案 2 :(得分:0)
使用文件名过滤器的解决方案:
创建一个实现org.apache.camel.component.file.GenericFileFilter的类,并实现方法accept以验证文件名
Timestamp
在Spring配置中
public class CustomFileName implements GenericFileFilter {
public boolean accept(GenericFile file) {
Calendar cal = Calendar.getInstance();
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
cal.add(Calendar.DATE, -1);
return file.getFileName().equals ("FILENAME_PREFIX"+dateFormat.format(cal.getTime()) + ".EXT");
}
}
和
<bean id="customFileFilter" class="com.sample.proj.util.CustomFileName"/>
答案 3 :(得分:0)
fileName=${date:now-24h:dd-MM-yyyy}