11

我在 Camel 的路径中使用日期:

fileName=${date:now:dd-MM-yyyy}

但我现在需要的是 - 1 天。那可能吗?

4

5 回答 5

13

好吧,不是直接的。简单语言中的 date: 对象只能获取当前时间(或您放置在标头中的某个时间值 - 您可以在 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());  
    }
}

将它作为 bean 连接到您的 Camel(或 spring,如果您使用它)注册表。如果您不确定如何执行此操作,请查找注册表和bean的“使用”部分。

假设您在注册表中将 bean 命名为“昨天”,使用 spring:

<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}");
}
于 2012-08-17T18:58:42.317 回答
4
fileName=${date:now-24h:dd-MM-yyyy}
于 2019-05-13T21:24:06.450 回答
3

我对此很好奇,并从骆驼邮件列表中寻求了一些帮助。实际上,您可以使用内联脚本(例如 groovy)执行您所要求的操作。见这里

我得到这个为我工作:

<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(或您使用的任何脚本语言)。

于 2013-04-22T17:24:27.163 回答
0

使用文件名过滤器的解决方案:

创建一个实现org.apache.camel.component.file.GenericFileFilter的类,并实现方法accept来验证文件名

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");
    }
} 

在 Spring 配置中

<bean id="customFileFilter" class="com.sample.proj.util.CustomFileName"/>

<route>
    <description>Route for copying file from one location to another with custom file name filter</description>
    <from uri="file://C:\Source?filter=#customFileFilter" />
    <to uri="file://C:\Destination" />
</route>
于 2018-03-16T10:51:47.713 回答
0

是的,您可以这样做,请参阅 Alberto 的回答。对此添加一些解释:Camel Simple 支持文档中写入的偏移量作为变量“日期”的描述。

于 2022-01-06T11:06:24.973 回答