2

これをできるだけシンプルにしようとしました。私は春のバッチを初めて使用します。特に複数ステップのジョブに関しては、春のアイテムを関連付ける方法を理解するのに小さな問題がありますが、これはコードではなく私のロジック(単純化されたもの) であり、春のバッチでそれを実装することを知りませんだから私はこれが正しい構造かもしれないと思った

  • 読者_お金
  • リーダーの詳細
  • タスクレット
  • 読者_利益
  • tasklet_calculation
  • ライター

ただし、間違っている場合は修正し、可能であればコードを提供してください。どうもありがとうございます

論理:

sql = "select * from MONEY where id= user input"; //the user will input the condition

while (records are available) { 

    int currency= resultset(currency column);
    sql= "select * from DETAILS where D_currency = currency";


    while (records are available) {

        int amount= resultset(amount column);
        string money_flag= resultset(money_type column);
        sql= "select * from PROFIT where Mtypes = money_type";

        while (records are available) {

            int revenue= resultset(revenue);

            if (money_type== 1) {
                int net_profit= revenue * 3.75;
                sql = "update PROFIT set Nprofit = net_profit";
            }

            else (money_type== 2) {
                int net_profit = (revenue - 5 ) * 3.7 ;
                sql = "update PROFIT set Nprofit = net_profit";
            }
        }
    sql="update DETAILS set detail_falg = 001 ";
    }
sql = "update MONEY set currency_flag = 009";

}
4

2 に答える 2

1

これを「従来の」スプリング バッチ構成に合わせるには、可能であれば 3 つのループを 1 つにフラット化する必要があります。

おそらく、同様の1つのループでそれを返すSQLステートメント。

select p.revenue, d.amount from PROFIT p, DETAILS d, MONEY m where p.MTypes = d.money_type and d.D_currency = m.currency and m.id = :?

それを「フラット化」すると、リーダーが結果セットからレコードを取得し、プロセッサが money_type ロジックを実行し、次にライターが「更新」ステートメント。

于 2013-04-24T19:00:41.113 に答える
1

計算に必要なすべての情報を含む集約オブジェクトのリストを返すことができる何らかの種類の DAO にすべての SQL を配置できる ItemReaderAdapter の使用を確認します。

または

CompositeItemReader パターンを使用できます。基本的に、複数の ItemReader を 1 つのマスター ItemReader に定義します。read() メソッドは、Processor /writer フェーズに進む前に、内部のすべての ItemReader を呼び出します。

いくつかの例を投稿できます..しかし、私は去らなければなりません:-(..

例が必要な場合はコメントを残してください

于 2013-04-24T20:04:38.490 に答える