Edited at

EmbulkをJavaに組み込んで実行する

More than 3 years have passed since last update.

こちらのIssueで紹介されている通りです。

https://github.com/embulk/embulk/issues/421

(Issueだとあんまり気付かれないので、Issueと内容は同じですが、qiitaでのシェアを目的としてます。)

EmbulkEmbedというクラスを呼び出して、下記にようにすればJavaからEmbulkを実行できます。

EmbulkのJarはhttps://dl.bintray.com/embulk/maven/とかから最新版をダウンロードすると良いと思います。

import java.io.File;

import org.embulk.EmbulkEmbed;
import org.embulk.EmbulkEmbed.Bootstrap;
import org.embulk.config.ConfigLoader;
import org.embulk.config.ConfigSource;

public class EmbulkEmbedTest {
public static void main(String[] args) throws Exception {
Bootstrap bootstrap = new EmbulkEmbed.Bootstrap();
EmbulkEmbed embulk = bootstrap.initializeCloseable();
try {
ConfigLoader loader = embulk.newConfigLoader();
ConfigSource source = loader.fromYamlFile(new File(args[0]));
embulk.run(source);
} finally {
embulk.destroy();
}
}
}

注意点としては、EmbulkのPluginがJRubyを使うため、それを参照させるように必要があります。すでにembulk gem install ...でPluginをインストールしている場合には、下記のようにライブラリがインストールされているので参照すると良いかと思います。


Linux/OSX/*BSD

export GEM_HOME=/user/.embulk/jruby/2.2.0


ただ、Embulkはあんまり外部プログラムに組み込むことは想定していないので、Javaからシェルを呼び出して実行したほうが良いかもしれない、みたいです。

参考までに。