目次 > 第2章 バッチフレームワークチュートリアル > 2.3 ファイルアクセス機能を用いた単純なジョブ > 2.3.5 ジョブ後処理の実装
2.3.5 ジョブ後処理の実装
本節では、ジョブ後処理の実装方法について説明する。
処理内容
- ジョブコンテキストより運用日付と処理件数を取得する。
- “履歴ファイル”に履歴情報を追加する。
備考
“履歴ファイル”は“rireki.csv”として“terasoluna-batch-blank\outputfile”内に作成される。
出力先フォルダが存在しない場合は「2.1 チュートリアル学習環境の整備 (8)ファイルの出力先を作成」を参照し、
作成しておくこと。
設計情報例
ジョブ定義例
サポート処理定義例
外部I/F定義例
手順
1. “RirekiFileData.java”を作成
“履歴ファイル”のファイル行オブジェクトクラスを作成する。
このクラスは“履歴ファイル”の出力パラメータとなる。
- パッケージエクスプローラビューで、“jp.terasoluna.batch.tutorial.uc0001.jb0002”パッケージを右クリックする。
- 「新規」→「クラス」を選択し、名前に“RirekiFileData”を入力し、「終了」を押下する。
- “RirekiFileData.java”を以下のように作成する。ここでは定義情報を次のように設定する。
- カラムの囲み文字はダブルクォーテーションを使用する
- 同名のファイルが存在する場合は同ファイルに追記する
- “処理日”は“yyyy/MM/dd”形式で出力する
/* * Copyright (c) 2007 NTT DATA Corporation * */ package jp.terasoluna.batch.tutorial.uc0001.jb0002; import java.util.Date; import jp.terasoluna.fw.file.annotation.FileFormat; import jp.terasoluna.fw.file.annotation.OutputFileColumn; /** * “履歴ファイル”用ファイル行オブジェクト。 */ @FileFormat(overWriteFlg = false, encloseChar='\"') public class RirekiFileData { /** * 処理日 */ @OutputFileColumn(columnIndex = 0, columnFormat = "yyyy/MM/dd") private Date syoribi = null; /** * 処理件数 */ @OutputFileColumn(columnIndex = 1) private int syorikensu = 0; /** * 処理日を返却する。 * @return 処理日 */ public Date getSyoribi() { return syoribi; } /** * 処理日を設定する。 * @param syoribi 処理日 */ public void setSyoribi(Date syoribi) { this.syoribi = syoribi; } /** * 処理件数を返却する。 * @return 処理件数 */ public int getSyorikensu() { return syorikensu; } /** * 処理件数を設定する。 * @param syorikensu 処理件数 */ public void setSyorikensu(int syorikensu) { this.syorikensu = syorikensu; } }
2. “FileJobPostLogic.java”を作成
ジョブ後処理クラスを作成する。必ず、“jp.terasoluna.fw.batch.openapi.SupportLogic”インタフェースを実装する。
また、型パラメータには「2.3.2 ジョブコンテキストの実装」の手順1で作成した“JB0002JobContext”を指定する。
- パッケージエクスプローラビューで、“jp.terasoluna.batch.tutorial.uc0001.jb0002”パッケージを右クリックする。
- 「新規」→「クラス」を選択し、名前に“FileJobPostLogic”を入力し、「終了」を押下する。
- “FileJobPostLogic.java”を以下のように作成する。
/* * Copyright (c) 2007 NTT DATA Corporation * */ package jp.terasoluna.batch.tutorial.uc0001.jb0002; import java.util.Date; import jp.terasoluna.batch.tutorial.uc0001.JB0002JobContext; import jp.terasoluna.fw.batch.openapi.BLogicResult; import jp.terasoluna.fw.batch.openapi.ReturnCode; import jp.terasoluna.fw.batch.openapi.SupportLogic; import jp.terasoluna.fw.file.dao.FileLineWriter; import jp.terasoluna.fw.file.dao.FileUpdateDAO; /** * ジョブ後処理クラス。 */ public class FileJobPostLogic implements SupportLogic<JB0002JobContext> { /** * DAOクラス。 * Springによりインスタンス生成され設定される。 */ private FileUpdateDAO updateDAO = null; /** * 履歴ファイルの名前。 * Springによりインスタンス生成され設定される。 */ private String outputFileName = null; /** * ジョブ後処理を実行する。 * @param jobContext ジョブコンテキスト */ public BLogicResult execute(JB0002JobContext jobContext) { //履歴をファイルに出力する。 Date unyohiduke = jobContext.getUnyohiduke(); int count = jobContext.getCount(); RirekiFileData rireki = new RirekiFileData(); rireki.setSyoribi(unyohiduke); rireki.setSyorikensu(count); FileLineWriter<RirekiFileData> fileLineWriter = updateDAO.execute(outputFileName,RirekiFileData.class); try { fileLineWriter.printDataLine(rireki); } finally { fileLineWriter.closeFile(); } //ビジネスロジック処理結果オブジェクトを返却する。 return new BLogicResult(ReturnCode.NORMAL_CONTINUE); } /** * FileUpdateDAOを設定する。 * @param updateDAO 設定するFileUpdateDAO */ public void setUpdateDAO(FileUpdateDAO updateDAO) { this.updateDAO = updateDAO; } /** * 履歴ファイル名を設定する * @param outputFileName ファイル名 */ public void setOutputFileName(String outputFileName){ this.outputFileName = outputFileName; } }
3. “JB0002.xml”を編集
“JB0002.xml”にジョブ後処理の定義を追加する。
手順2で作成した“FileJobPostLogic”を指定するため、以下の定義を<beans></beans>内に追加する。
<!-- ジョブ後処理 --> <util:list id="jobPostLogicList"> <bean class="jp.terasoluna.batch.tutorial.uc0001.jb0002.FileJobPostLogic"> <property name="updateDAO" ref="csvFileUpdateDAO" /> <property name="outputFileName" value="outputfile/rireki.csv"/> </bean> </util:list>
参考資料
- 『BC-01 ファイルアクセス機能』
- 『BD-01 ビジネスロジック実行機能』