[Talend]コンポーネントの定義をプロパティファイルで切り出しておく

2015.07.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

やっておきたいこと

Talendでジョブ定義するにあたり、いろんなコンポーネントを配置することになります。
ローカルPCで開発している時には特に問題ないですが、作成後にジョブを実行形式で書き出して運用環境へ
配置したい場合は少し工夫が必要です。

例えばtMysqlOutPutのDB接続情報を[組み込み]のままジョブの実行形式を書き出してしまうと
自動生成されるjavaソース内に情報が埋め込まれたままになります。

					String properties_tMysqlOutput_1 = "noDatetimeStringSync=true";
					if (!properties_tMysqlOutput_1
							.contains("rewriteBatchedStatements")) {
						properties_tMysqlOutput_1 += "&rewriteBatchedStatements=true";
					}

					url_tMysqlOutput_1 = "jdbc:mysql://" + "127.0.0.1" + ":"
							+ "3306" + "/" + "test" + "?"
							+ properties_tMysqlOutput_1;

それを回避するためにプロパティファイルを外部に書き出しておくと便利です。
上のソースと同じ部分を抜き出しましたが、下記は自動生成されるjavaソース内が変数として定義されてます。

					String properties_tMysqlOutput_1 = context.MySQLCon_AdditionalParams;
					if (!properties_tMysqlOutput_1
							.contains("rewriteBatchedStatements")) {
						properties_tMysqlOutput_1 += "&rewriteBatchedStatements=true";
					}

					url_tMysqlOutput_1 = "jdbc:mysql://"
							+ context.MySQLCon_Server + ":"
							+ context.MySQLCon_Port + "/"
							+ context.MySQLCon_Database + "?"
							+ properties_tMysqlOutput_1;

定義を外部ファイルへ書き出す為の手順

tMysqlOutputをサンプルにやってみます。
NO3_1_1
何も意識せずにコンポーネントを配置するとプロパティタイプが【組み込み】になりますので一通り設定情報を
入力後に保存アイコンをクリックしてリポジトリに登録します。

クリックすると下記画面が出てきますので、任意の名前を付けて【Next】をクリックします。
NO3_2

この画面で設定が正しいかを確認するために【チェック】をクリックして接続ができるかを最終確認します。
NO3_3

次に【コンテキストとしてエクスポート】をクリックして下記画面を表示させて【Next】をクリック。
NO3_4

下記画面が表示されますので、必要項目を任意に入力して、【Next】をクリックします。
NO3_5

下記画面が表示されますので、追加で定義したいコンテキストがある場合は必要に応じて左下の+ボタンを
クリックして定義を追加します。
NO3_6

あとは【Finish】ボタンをクリックすると下記画面のように設定値が自動で文字列で置き換えられますので、この画面でも【Finish】をクリックします。
NO3_7

すると下記確認画面が表示されますので、【Yes】をクリックします。
NO3_8

確認画面で【Yes】をクリックすると対象のコンポーネントの項目がコンテキスト文字列に置き換えられます。
NO3_10

ジョブをエクスポート

ジョブ定義が完了したら自律実行ジョブとして書き出してみます。
NO3_12
正しくエクスポートが完了するとCMBlog_4_0.1.zipのようにファイルが出来上がります。
それを展開すると下記のようにcontextsフォルダ配下にファイルが書き出されます。
NO3_14
Default.propertiesの中身は以下のような感じになっています。

#this is context properties
#Wed Jul 29 16:34:08 KST 2015

#Context variables from repository context:SQLServerCon
SQLServerCon_Login=sa
SQLServerCon_AdditionalParams=noDatetimeStringSync\=true
SQLServerCon_Password=15ae165a729fc7d0f1f7aba1746784fa
SQLServerCon_Server=127.0.0.1
SQLServerCon_Schema=
SQLServerCon_Port=1433
SQLServerCon_Database=sample

#Context variables from repository context:MySQLCon
MySQLCon_Database=test
MySQLCon_Password=af8935f05ad2a205
MySQLCon_Server=127.0.0.1
MySQLCon_Port=3306
MySQLCon_Login=root
MySQLCon_AdditionalParams=noDatetimeStringSync\=true

プロダクション環境ではMySQLのサーバがジョブ実行のマシンとは別の場合などはここでMySQLCon_Serverの部分のIPアドレスを
該当のIPにテキストエディタなどで直接書き換えて保存すれば対応可能になります。