Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

きっかけ

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

    }
}

参考

ma91n
🗽Backend Engineer 🏢Future所属 📝会社の技術ブログ運営者  ⛏趣味でGo製ツール開発してます 📢エモ記事はMediumに書いてます✨
https://medium.com/@laqiiz
future
ITを武器とした課題解決型のコンサルティングサービスを提供します
http://future-architect.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away