2017-09-21 18 views
1

スプリングバッチのステップ実行時間を測定する正しい方法は何ですか?ここ スプリングバッチステップ実行時間の測定

はステップの一例である:私は私はステップの前と後のステップを持っている必要があり、この場合にItemWriter上のステップの前にIemReader

public class xxxxxItemReader implements xxxxItemReader <XXXX>{ 

    private Logger log = LoggerFactory.getLogger(this.getClass()); 

    @Override 
    public void beforeJob(JobExecution jobExecution) { 
     // 
     // Can Log || do some business code 
     // 
     log.info("Intercepting Job Excution - Before Job!"); 
    } 

    @Override 
    public void afterJob(JobExecution jobExecution) { 
     // 
     // Can Log || do some Business code 
     // 
     log.info("Intercepting Job Excution - After Job!"); 
    } 

} 

を使用して、いくつかの例をまく

@Bean 
    public Step step1() { 
     return stepBuilderFactory.get("step1") 
       .<POJO, POJO> chunk(10) 
       .reader(pojoReader()) 
       .processor(pojoProcessor()) 
       .build(); 
    } 

私ItemWriterとitemReader、そして最後にまとめて(追加)、hollステップの実行時間を取得しますか?それは最善の方法ですか?

+0

フルステップ実行時間は、メタデータで使用できます。チャンクタイム(読み込みプロセス - 書き込み時間)を意味しましたか?個別に読み取り、処理、書き込みするだけですか? –

+0

はい穴の実行ステップ時間を探しています。リスナーを経由せずにこの情報を得ることができる場所はありますか –

+0

なぜとても複雑ですか? 'StepExecution'にはすでに開始時刻と終了時刻が含まれていますので、' afterStep'で計算することができます。あなたは特別なことをする必要はありません。その横にあるバッチ・バッチは、このすべての情報をメタデータ用に選択したデータストア(メモリー内またはデータベース内)に格納します。 –

答えて

0

あなたが共有しているリスナーがorg.springframework.batch.core.JobExecutionListenerあるステップのための同様の方法のために、あなたが使用する必要がある一方で - org.springframework.batch.core.StepExecutionListenerとメソッドを実装 - void beforeStep(StepExecution stepExecution) & ExitStatus afterStep(StepExecution stepExecution);

あなたにインターフェース上&のconfigureを実行することにより、リスナークラスを作成します。ステップ。

次にように、このリスナーにインスタンスフィールドを定義 - long startTimeafterStepで、その後beforeStepstartTime= System.nanoTime();のようなものに設定し、この文字列は、ミリ秒単位で時間を記録するために、あなたのロガーに渡すことができます - (System.nanoTime() - startTime)/1e6 + "ms."

代わりに、メタDBテーブル - BATCH_STEP_EXECUTIONにはこれらの時間があります - START_TIME & END_TIMEカラムこれらの時間をいくつかのファイルにダンプするか、任意の形式で取得するスクリプトを書くことができます。

私はあなたが春のブートを使用している場合はわからないけど

hereはまた、あなたの設定がで使用されていないことを確認してください参照してください - HSQLまたはH2データベースとメモリリポジトリ。

+0

春のバッチで初心者と同じように、これらのDBテーブルは自動的に作成されますか?私はそれらにアクセスできますか? –

+0

ジョブを実行しているユーザーの全体的なセットアップとユーザー権限によって異なります。スクリプトは 'spring-batch-core' jarの' org.springframework.batch.core'パッケージに含まれています。あなたのデータベースを見直してください。それらのSQLファイルからのステートメントの助けを借りて、これらの6つのテーブルを手動で作成することもできます。 'spring.batch.initializer.enabled'は、それらのスクリプトを自動的に実行する必要があるかどうかを決定するプロパティです。 –

+0

ありがとうございました –

関連する問題