LoginSignup
2
3

More than 5 years have passed since last update.

Apache CamelのEndpoint定義で環境変数をプレスフォルダーで埋め込む方法

Last updated at Posted at 2016-10-14

きっかけ

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

    }
}

参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3