2017-03-09 68 views
0

我使用的是spring批次3.0。我有一個場景,我需要運行大約1000個具有1個屬性值和具有不同屬性值的作業的作業。有沒有辦法在啓動或計劃時間期間設置作業的屬性,而不是在作業配置中。或者以任何其他方式實現這樣的功能,而不需要複製1000個工作。在春季批次發佈期間設置屬性值

<batch:job id="job_A" parent="simpleJob"> 
     <batch:step id="A" parent="simpleStep"> 
      <batch:tasklet> 
       <bean id="bA" class="ClassA" scope="step"> 
         <property name="downloadFileA" value="false" /> 
       </bean>  
      </batch:tasklet> 
     </batch:step> 
</batch:job> 

再次同樣的工作屬性值爲true。

<batch:job id="job_A" parent="simpleJob"> 
     <batch:step id="A" parent="simpleStep"> 
      <batch:tasklet> 
       <bean id="bA" class="ClassA" scope="step"> 
         <property name="downloadFileA" value="true" /> 
       </bean>  
      </batch:tasklet> 
     </batch:step> 
</batch:job> 

任何幫助,高度讚賞。

+0

檢查石英調度 – FaigB

回答

2

您可以使用傳遞給作業啓動器的作業參數,然後通過作業中的步驟訪問作業參數。

當啓動一個工作,你可以做這樣的事情......

JobParameters jobParameters = new JobParametersBuilder() 
    .addString("downloadFileA", "true") 
    .toJobParameters(); 

JobExecution jobExecution = jobLauncher.run(job, jobParameters); 

然後,您可以在您的步注入jobParameter ...

@Autowired 
@Value("#{jobParameters[downloadFileA]}") 
String downloadFileA; 
0

我想你應該看看決勝局:

從春季批次文檔:

在某些情況下,更多的信息比退出狀態可能 決定哪些下一步行動執行要求。在這種情況下,可以使用JobExecutionDecider來協助做出決定。

public class MyDecider implements JobExecutionDecider { 
    public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { 
     if (someCondition) { 
      return "FAILED"; 
     } 
     else { 
      return "COMPLETED"; 
     } 
    } 
} 

在就業結構中,「決定」的標籤將指定的決勝局 用作以及所有的轉換。

<job id="job"> 
    <step id="step1" parent="s1" next="decision" /> 

    <decision id="decision" decider="decider"> 
     <next on="FAILED" to="step2" /> 
     <next on="COMPLETED" to="step3" /> 
    </decision> 

    <step id="step2" parent="s2" next="step3"/> 
    <step id="step3" parent="s3" /> 
</job> 

<beans:bean id="decider" class="com.MyDecider"/> 

因此,換句話說,你應該創建一個實現JobExecutionDecider接口的類,然後返回結果根據您的if-else測試,並在春季批次的XML配置使用這個類。瞧!