きっかけ
Apache Camelに入門する際に参考になりまくる日本Apache Camelユーザ会さん。
…に載っている、とあるサンプルコードのパス指定が、ユーザ名を直接指定していました。
これをなんとか環境変数から取得できないかと調べた次第です。
(公式ドキュメントに全て記載済みでした)
バージョン
camel-core 2.18.0
とあるサンプルコード
- 非常に簡潔でかつオプションも色々と設定されている良いサンプルですね
- やっていることは以下です
- あるフォルダA配下のファイルをからフォルダBにコピー
- 拡張子を日付に変更
- ちなみに、処理後にコピーされたファイルを削除しません(noop=trueの設定)
- 気になった点は、パスの指定が
/home/knoppix/Desktop
とハードコードされてること- また、余談ですがWindows環境ではディレクトリにコロン「:」を使えないので書き換えが必要です
https://osdn.net/projects/cameluserjp/wiki/スタンドアロン版Camelの例
FileToFileRoute.java
import org.apache.camel.builder.RouteBuilder;
public class FileToFileRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
// /home/knoppix の部分が気になる
from("file:/home/knoppix/Desktop/inbox?noop=true&delay=5000")
.to("file:/home/knoppix/Desktop/outbox?fileName=${file:name.noext}.${date:now:yyyyMMdd-HH:mm:ss}");
}
}
対応
ハードコードな値である/home/knoppix
の部分を{{user.home}}
に書き換えます
- バージョン2.3より
{{}}
でプロパティのプレスフォルダーが利用可能。 - JVMのシステムプロパティの場合はそのままプロパティ名をセットするらしいです
- オプションの方は
${}
で指定できるのに、エンドポイントは{{}}
でちょっとわかりにくいですね- (※)ライセンス的な制約とのことですが…
FileToFileRoute.java改1
import org.apache.camel.builder.RouteBuilder;
public class FileToFileRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:{{user.home}}/Desktop/inbox?noop=true&delay=5000")
.to("file:{{user.home}}/Desktop/outbox?fileName=${file:name.noext}.${date:now:yyyyMMdd-HHmmss}");
}
}
ちなみに、OSの環境変数を取得する場合は{{env:環境変数名}}
で設定可能なようです。
FileToFileRoute.java改2
import org.apache.camel.builder.RouteBuilder;
public class FileToFileRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:{{env:HOMEPATH}}/Desktop/inbox?noop=true&delay=5000")
.to("file:{{env:HOMEPATH}}/Desktop/outbox?fileName=${file:name.noext}.${date:now:yyyyMMdd-HHmmss}");
}
}
参考
-
Apache CamelのHTTP Proxy設定方法
-
Apache Camel > Documentation > Components > Properties > Properties Component