2017-11-21 11 views
0

xls(ここではnetCreditAmountという列が存在します)から値を読み取り、値をデータベースに保存する必要があります。必要なのは、すべての行からnetCreditAmountの値を追加し、この合計をデータベース内でxlsの最初の行のみに設定し、残りの行を対応するnetCreditAmountsとともに挿入することです。 Spring Batchでの実装方法はどうすればよいですか。通常のリーダー、プロセッサー、ライターは正常に動作していますが、この実装を挿入する場所はどこですか? ありがとう!リーダとプロセッサ間のスプリングバッチパス値

+0

ようになります

@Bean public Job myJob(JobBuilderFactory jobs) throws Exception { return jobs.get("myJob") .start(step1LoadAllData()) // This step will load all data in database excpet first row in xls .next(updateNetCreditAmountStep()) //// This step will be a tasklet. and will update total sum in first row. You can use database sql for sum for this .build(); } 

を下回るようにすることができプロセッサクラス。 –

答えて

0

ヨは、追加のタスクレットを追加することによってこの問題を解決することができます。 ジョブフローは、あなたがオブジェクトの処理および更新を行う必要がありますので、あなたは、読み出したデータに何かを処理する必要があるので、タスクレットが

以下
@Component 
public class updateNetCreditAmountTasklet implements Tasklet { 

    @Override 
    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) 
      throws Exception { 
      Double sum = jdbctemplate.queryForObject("select sum(netCreditAmount) from XYZ", Double.class); 
     // nouw update this some in database for first row 
     return null; 
    } 

} 
+0

ありがとうございました...これはうまくいきました! –

0

だから問題は何ですか? バッチジョブステップを設定して、リーダープロセッサーライターを使用する必要があります。ですから、読者により提供されたものと同じタイプの持つために必要なもの

public interface ItemProcessor<I, O> { 
    O process(I item); 
} 

からTを;:

public interface ItemReader<T> {  
    T read(); 
} 

プロセッサ:

Readerは、インターフェースを持っています前記プロセッサに渡す - I

stepBuilderFactory.get("myCoolStep") 
      .<I, O>chunk(1) 
      .reader(myReader) 
      .processor(myProcessor) 
      .writer(myWriter) 
      .build(); 
関連する問題