Camelのパスで日付を使用しています:
fileName=${date:now:dd-MM-yyyy}
しかし、私が今必要としているのは、1 日です。それは可能ですか?
Camelのパスで日付を使用しています:
fileName=${date:now:dd-MM-yyyy}
しかし、私が今必要としているのは、1 日です。それは可能ですか?
まあ、直接ではありません。単純な言語の 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}");
}
私はこれに興味があり、ラクダのメーリング リストに助けを求めました。実際、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 (または使用するスクリプト言語) が必要です。