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

これを Camel (または Spring を使用する場合は Spring) レジストリに Bean として接続します。その方法がわからない場合は、レジストリとbeanの「使用」セクションを参照してください。

レジストリで Bean に「yesterday」という名前を付けたとします。

<bean id="yesterday" class="some.package.YesterdayBean"/>

次に、ファイルコンポーネントで使用します。

.to("file:fo/bar?fileName=${bean:yesterday}")

これが必要な 1 つの場所であり、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 に答える
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 に答える