4

フラット ファイルを解析し、それらのレコードを mysql データベースの挿入に処理する必要があるシナリオがあります (スキーマは既に存在します)。

FlatFileItemReader を使用してファイルを解析し、JdbcCursorItemWriter を使用してデータベースに挿入しています。

また、ItemProcessor を使用して、列の値を変換したり、不要なレコードをスキップしたりしています。

私の問題は、これらの挿入のいくつかは、すでにデータが入っている他のテーブルへの外部キーを持つ必要があることです。

そのため、ItemProcessor ロジック内で、選択して ID を取得し、pojo を更新することを考えていました。

これが最善の方法ですか?このすべてを書き始めたばかりなので、代替案を検討できます。

ありがとう!

4

2 に答える 2

4

In ItemProcessora Spring Batch ステップは、データの強化に一般的に使用され、そのようなものについてデータベースにクエリを実行するのが一般的です。

レコードの場合、挿入ステートメントでサブ選択を使用して、レコードが挿入されているときに外部キー値を取得するという別のオプションがあります。これにより、追加のデータベース ヒットが削除されるため、パフォーマンスが向上する可能性があります。

于 2015-05-28T14:21:24.517 に答える
0

バッチ プロセスの場合 - バッチ リスナーを使用してバッチ内の任意の場所で以下のメソッドを呼び出すことができる場所が必要な場合

私が書いた以下のコードは、私のために働いた -

メインクラスで - アプリケーションコンテキストを静的変数にロードします - APP_CONTEXT

XML ベースのアプローチを使用していない場合は、自動配線して dataSource を取得し、以下のコードを使用できます。

 Connection conn = null;
PreparedStatement pstmt= null;

try {


DataSource dataSource = (DataSource) Main.APP_CONTEXT
        .getBean("dataSource");

 conn = dataSource.getConnection();
 pstmt = conn.prepareStatement(" your SQL query to insert ");

pstmtMstr.executeQuery();

} catch (Exception e) {

}finally{

    if(pstmt!=null){
        pstmt.close();
    }if(conn!=null){
        conn.close();
    }


}
于 2015-05-29T12:18:18.183 に答える