目次 > 第2章 バッチフレームワークチュートリアル > 2.3 ファイルアクセス機能を用いた単純なジョブ > 2.3.3 対象データ取得処理の準備
2.3.3 対象データ取得処理の準備
本節では、対象データ取得処理で必要となるファイル行オブジェクトおよびファイルコレクターの実装方法について説明する。
処理内容
- “入金ファイル”を読み込む。
- 取得したデータを入力パラメータクラスに設定する。
備考
“terasoluna-batch-blank\inputfile\nyukindata.csv”が“入金ファイル”である。
ファイルが存在しない場合は「2.1 チュートリアル学習環境の整備 (7)入力ファイルの取得」を参照し、
取得しておくこと。
設計情報例
ジョブ定義例
外部I/F定義例
手順
1. “JB0002Data.java”を作成
“入金ファイル”のファイル行オブジェクトクラスを作成する。
このクラスはビジネスロジックの入力パラメータとなる。必ず、ファイルのカラムに対応した属性およびgetter/setterを定義すること。
特にsetterメソッドはフレームワークから使用されるため、Javaの規約に準拠している必要がある。
- パッケージエクスプローラビューで、“jp.terasoluna.batch.tutorial.uc0001”パッケージを右クリックする。
- 「新規」→「クラス」を選択し、名前に“JB0002Data”を入力し、「終了」を押下する。
- “JB0002Data.java”を作成する。 ここでは定義情報を次のように設定する。
- 入力チェック機能による入力チェックは行わない
- “顧客ID”は必ず3バイトであること
- “取引日”は必ず10バイトであり、“yyyy-MM-dd”形式であること
/* * Copyright (c) 2007 NTT DATA Corporation * */ package jp.terasoluna.batch.tutorial.uc0001; import java.util.Date; import jp.terasoluna.fw.file.annotation.FileFormat; import jp.terasoluna.fw.file.annotation.InputFileColumn; import jp.terasoluna.fw.file.annotation.OutputFileColumn; /** * “入金データファイル”用ファイル行オブジェクト。 */ @FileFormat(overWriteFlg=true, encloseChar='\"') public class JB0002Data { /** * 取引ID */ @InputFileColumn(columnIndex = 0) private int id = 0; /** * 支店 */ @InputFileColumn(columnIndex = 1) private String siten = null; /** * 顧客ID */ @InputFileColumn(columnIndex = 2, bytes = 3) private String kokyakuid = null; /** * 入金金額 */ @InputFileColumn(columnIndex = 3) private int nyukin = 0; /** * 取引日 */ @InputFileColumn(columnIndex = 4, bytes = 10, columnFormat = "yyyy-MM-dd") private Date torihikibi = null; /** * 取引IDを返却する。 * @return 取引ID */ public int getId() { return id; } /** * 取引IDを設定する。 * @param id 取引ID */ public void setId(int id) { this.id = id; } /** * 支店を返却する。 * @return 支店 */ public String getSiten() { return siten; } /** * 支店を設定する。 * @param siten 支店 */ public void setSiten(String siten) { this.siten = siten; } /** * 顧客IDを返却する。 * @return 顧客ID */ public String getKokyakuid() { return kokyakuid; } /** * 顧客IDを設定する。 * @param kokyakuid 顧客ID */ public void setKokyakuid(String kokyakuid) { this.kokyakuid = kokyakuid; } /** * 入金金額を返却する。 * @return 入金金額 */ public int getNyukin() { return nyukin; } /** * 入金金額を設定する。 * @param nyukin 入金金額 */ public void setNyukin(int nyukin) { this.nyukin = nyukin; } /** * 取引日を返却する。 * @return 取引日 */ public Date getTorihikibi() { return torihikibi; } /** * 取引日を設定する。 * @param torihikibi 取引日 */ public void setTorihikibi(Date torihikibi) { this.torihikibi = torihikibi; } /** * “入金データファイル”用ファイル行オブジェクトの内容を出力する。 * @return “入金データファイル”用ファイル行オブジェクトの内容 */ @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(" 取引ID:"); sb.append(id); sb.append(", 支店:"); sb.append(siten); sb.append(", 顧客ID:"); sb.append(kokyakuid); sb.append(", 入金金額:"); sb.append(nyukin); sb.append(", 取引日:"); sb.append(torihikibi); return sb.toString(); } }
ファイル全体に関する定義情報は“FileFormat”アノテーションで定義し、入力属性に関する定義情報は“InputFileColumn”アノテーションで定義する。
本項で使用する設定項目を以下に示す。
- “InputFileColumn”アノテーションの設定項目
- columnIndex
- 必須項目。ファイルから読み込んだ1行のデータの内、何番目(カラム)のデータをファイル行オブジェクトの属性に格納するのかを設定する。
カラムの指定は“0”からである。
- 必須項目。ファイルから読み込んだ1行のデータの内、何番目(カラム)のデータをファイル行オブジェクトの属性に格納するのかを設定する。
- byte
- カラムに対するバイト長を設定する。
- columnFormat
- Date型やBigDecimal型に対するフォーマットを設定する。
- columnIndex
備考
「2.3.4 ビジネスロジックの実装」で警告ログを出力する際に、問題となった入力データの詳細を出力するために、本クラスではtoString()メソッドをオーバーライドしている。
2. “JB0002.xml”を編集
“JB0002.xml”に対象データ取得処理の定義を追加する。
入力ファイルより対象データを取得するファイルコレクターを定義するため、以下の定義を<beans></beans>内に追加する。
<!-- コレクタの設定 --> <bean id="collector" parent="fileChunkCollector"> <property name="fileQueryDao" ref="csvFileQueryDAO" /> <property name="inputFileName" value="inputfile/nyukindata.csv"/> <property name="resultClass"> <bean class="jp.terasoluna.batch.tutorial.uc0001.JB0002Data"/> </property> <property name="readNextLine" value="false" /> </bean>
“csvFileQueryDAO”はCSVファイルのアクセス用Beanである。
“inputFileName”には入力ファイルのパス“inputfile/nyukindata.csv”を指定し、“resultClass”には手順1で作成した“JB0002Data”を指定する。
“readNextLine”にはコレクタ処理でエラーが発生した場合に以後の行(データ)のコレクタ可否を設定する。
参考資料
- 『BC-01 ファイルアクセス機能』
- 『BD-02 対象データ取得機能』