[Talend]ジョブのJVM設定をして文字化けを防ぐ

今回はTalendのジョブのJVM設定をして文字化けを防ぐ方法をご紹介したいと思います。
2018.11.09

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

はじめに

こんにちは。DI部の大高です。

今回はTalendのジョブのJVM設定をして文字化けを防ぐ方法をご紹介したいと思います。

前提条件

Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.1.1」で検証しています。また、実行環境は「Windows 10」となります。

なにが問題となるのか

まずは、以下のジョブをご覧ください。

1つ目のジョブは、単純に「tJava」で標準出力に日本語を出力しているジョブです。また、より分かりやすくするために「System.getProperty("file.encoding")」も出力しています。

System.out.println("file.encoding: " + System.getProperty("file.encoding"));
System.out.println("こんにちは");

このジョブを実行すると以下のとおりになります。

[statistics] connecting to socket on port 3393
[statistics] connected
file.encoding: UTF-8
こんにちは
[statistics] disconnected

つぎに2つ目のジョブです。こちらでは、「tSystem」コンポーネントを利用して先程のジョブをエクスポートしたもの(JobJVMEnv_run.bat)を呼び出して、結果の「標準出力」を「tJava」で出力しています。

このジョブの実行結果は以下のとおりです。

[statistics] connecting to socket on port 4042
[statistics] connected

C:\opt\Talend\TOS\BD\7.1.1\workspace\SANDBOX\poms\jobs\process\Misc\jobcaller_0.1\src\main\ext-resources>C:

C:\opt\Talend\TOS\BD\7.1.1\workspace\SANDBOX\poms\jobs\process\Misc\jobcaller_0.1\src\main\ext-resources>cd C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv\ 

C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv>java -Dtalend.component.manager.m2.repository=C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv/../lib -Xms256M -Xmx1024M -cp .;../lib/routines.jar;../lib/dom4j-1.6.1.jar;../lib/log4j-1.2.17.jar;jobjvmenv_0_1.jar; sandbox.jobjvmenv_0_1.JobJVMEnv  --context=Default  
file.encoding: MS932
����ɂ���
[statistics] disconnected

「file.encoding」が「MS932」となっているため、文字化けが発生しています。これは「file.encoding」が明示的に「UTF-8」に設定されていないために発生しているので、以下で設定方法を説明します。

ジョブのJVMの設定

ジョブのJVM設定は、ジョブを開いたあとに「実行」タブの「詳細設定」から設定することが可能です。設定を追加するには「特定のJVM引数の使用」を有効にして、「新規...」をクリックします。

追加したいJVM引数(今回は「-Dfile.encoding=UTF-8」)を記述して「OK」をクリックします。

すると、JVM引数が追加されたことが確認できます。

このJVM引数はジョブをエクスポートした時にも設定されるので、結果としてこの設定でエクスポートすれば文字化けが発生しないことになります。

また、JVM設定は個別のジョブに設定可能ですがワークスペースで共通して設定することも可能です。

メニューの「ウィンドウ > Preferences」から「Talend > 実行/デバッグ」を開きます。ここの「ジョブ実行VMの引数」で先程と同様に設定することが可能です。

設定すると、ジョブ側には共通JVM設定が自動で設定されていることが確認できます。

設定後のジョブ実行結果

上記のようにJVM引数を設定した上でジョブをエクスポートし、「tSystem」から呼び出すようにします。

先程のジョブを実行すると、以下のような実行結果となります。

[statistics] connecting to socket on port 4023
[statistics] connected

C:\opt\Talend\TOS\BD\7.1.1\workspace\SANDBOX\poms\jobs\process\Misc\jobcaller_0.1\src\main\ext-resources>C:

C:\opt\Talend\TOS\BD\7.1.1\workspace\SANDBOX\poms\jobs\process\Misc\jobcaller_0.1\src\main\ext-resources>cd C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv\ 

C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv>java -Dtalend.component.manager.m2.repository=C:\tmp\Sandbox\Misc\Job-JVM-Env\JobJVMEnv_0.1\JobJVMEnv/../lib -Xms256M -Xmx1024M -Dfile.encoding=UTF-8 -cp .;../lib/routines.jar;../lib/dom4j-1.6.1.jar;../lib/log4j-1.2.17.jar;jobjvmenv_0_1.jar; sandbox.jobjvmenv_0_1.JobJVMEnv  --context=Default  
file.encoding: UTF-8
こんにちは
[statistics] disconnected

文字化けがなおりました!また、JVM引数として「-Dfile.encoding=UTF-8」が設定されていることも確認できます。

まとめ

以上、ジョブのJVM設定をして文字化けを防ぐ方法のご紹介でした。個人的にとても悩まされていたので、どなたかの参考になれば幸いです。

それでは。