JBeretでは、org.jberet.spi.JobXmlResolverの実装クラスを作ることで、ジョブ定義のXMLファイルの置き場所を変更できる。
JobXmlResolverの実装クラスを作る
JobXmlResolverのJavadocによると、resolveJobXml以外は任意となっているので、
任意メソッドの空実装を持っているAbstractJobXmlResolverを実装するとよい。
実装としては、こんな感じになる。この実装では、環境変数から取得したディレクトリの中からジョブ定義を探して返しています。
ファイルがない場合にnullを返しているので、この場合はデフォルトの実装(META-INF/batch-jobs配下から探すやつ)が動きます。
import org.jberet.tools.* import java.io.* import java.nio.file.* class FileSystemBasedJobXmlResolver : AbstractJobXmlResolver() { override fun resolveJobXml(jobXml: String, classLoader: ClassLoader): InputStream? { val dir = System.getenv("jobxml-dir") val jobXmlFilePath = Paths.get(dir, jobXml) println("jobXmlFilePath = ${jobXmlFilePath}") return if (Files.isReadable(jobXmlFilePath)) { FileInputStream(jobXmlFilePath.toFile()) } else {した null } } }
プロバイダ構成ファイルを作る
ファイル名は、org.jberet.spi.JobXmlResolverで、resources/META-INF/servicesの下においてあげます。
ファイルの中には、JobXmlResolverを実装したクラスのクラス名を設定します。
動かしてみる
動作確認するためのBatchlet
ステップ名を出力するだけの簡単な実装です。
@Named @Dependent class TestBatchlet @Inject constructor( private val stepContext: StepContext ) : AbstractBatchlet() { override fun process(): String { println("stepContext.stepName = ${stepContext.stepName}") return "ok" } }
ジョブ定義のXML
確認用のBatchletを実行するステップを定義する
<job id="test" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0"> <step id="myStep"> <batchlet ref="testBatchlet" /> </step> </job>