2011-10-18 4 views
0

私はジョブの説明を持っている:アクセス春のバッチジョブの定義

<job id="importJob" job-repository="jobRepository"> 
    <step id="importStep1" next="importStep2" parent="abstractImportStep"> 
     <tasklet ref="importJobBean" /> 
    </step> 
    <step id="importStep2" next="importStep3" parent="abstractImportStep"> 
     <tasklet ref="importJobBean" /> 
    </step> 
    <step id="importStep3" next="importStep4" parent="abstractImportStep"> 
     <tasklet ref="importJobBean" /> 
    </step> 
    <step id="importStep4" next="importStepFinish" parent="abstractImportStep"> 
     <tasklet ref="importJobBean" /> 
    </step> 
    <step id="importStepFinish"> 
     <tasklet ref="importJobBean" /> 
    </step> 
</job> 

私は「importJob」で定義されたどのように多くの手順を知りたい(この場合は5)。 のように見えるJobInstance apiは何も関係がありません。これはまったく可能ですか?

答えて

1

あなたの仕事についてのメタデータを読み込むためのクリーンな方法がJobExplorerているオプション


  • JobExplorer

を持っている:

public interface JobExplorer { 

    List<JobInstance> getJobInstances(String jobName, int start, int count); 

    JobExecution getJobExecution(Long executionId); 

    StepExecution getStepExecution(Long jobExecutionId, Long stepExecutionId); 

    JobInstance getJobInstance(Long instanceId); 

    List<JobExecution> getJobExecutions(JobInstance jobInstance); 

    Set<JobExecution> findRunningJobExecutions(String jobName); 
} 

  • JobExecution

しかし、あなたは、単にJobExecutionを見て、それを得ることができます:あなたが仕事を起動したときに、あなたにJobExecutionを返しJobLauncher

// Returns the step executions that were registered 
public Collection<StepExecution> getStepExecutions() 

public interface JobLauncher { 

    public JobExecution run(Job job, JobParameters jobParameters) 
       throws JobExecutionAlreadyRunningException, JobRestartException; 
} 

または、JobExecutionListenerで取得できます

public interface JobExecutionListener { 

    void beforeJob(JobExecution jobExecution); 

    void afterJob(JobExecution jobExecution); 
} 

これ以外の方法もありますが、上記の2つで十分です。


コメント答えるためにEDIT:あなたは関係なく、ステップが実行されたかどうかのメタデータを取得したいのですが場合

を、で定義される便利なメソッドgetStepNamesがありますAbstractJobとしてSimpleJobに(例えば)に実装されていますtolitiusねえ

/** 
* Convenience method for clients to inspect the steps for this job. 
* 
* @return the step names for this job 
*/ 
public Collection<String> getStepNames() { 
    List<String> names = new ArrayList<String>(); 
    for (Step step : steps) { 
     names.add(step.getName()); 
    } 
    return names; 
} 
+0

。答えはThanx。しかし、私はそれが私が探しているものではないと思います。ジョブの定義についてのメタ情報を取得する必要がありますが、ジョブの実行は必要ありません。 –

+0

正確に何をしようとしていますか(この時点で、この情報が必要ですか) 'getStepExecutions()。size()'がジョブのステップ数を与えるからです。 – tolitius

+0

さて、私はジョブの進捗バーを実装しようとしています。進捗状況を追跡するには、ジョブで設定されたステップ数と実行されたステップ数を知る必要があります。このために、完了したステップ数を追跡するStepExecutionListenerを作成しました。このデータは* stepExecution.getJobExecution()。getStepExecutions()*によって解決されます。しかし、これはジョブの設定されたステップの合計を表すものではありません。 –

関連する問題