2017-09-28 76 views
1

我正在使用弹簧批次,但由于作业实例已存在错误,我需要在我的作业参数中添加当前时间。我无法找出其中添加工作paramters。这里是我的代码:将当前时间戳记作为作业参数弹簧批次

<step id="myStep"> 
<tasklet> 
    <chunk reader="myReader" processor="myProcessor" writer="myWriter" commit-interval="6000" skip-limit="9000"> 
    //some more code. 
</chunk> 
</tasklet> 
</step> 

<bean id="myReader" class="org.springframework,batch.item.database.StoredProcedueItemReader" scope="step"> 
//define property for datasource , procedurename , rowmapper, parameters 
<property name="preparedStatementSetter" ref="myPreparedStatmentSetter"> 
</bean> 

<bean id="myPreparedStatmentSetter" class="com.mypackage.MyPreparedStatementSetter" scope="step"> 
<property name="kId" value="#{jobParameters[kId]}"> 
</bean> 

当我试图运行同一kId多次我得到The job already exist错误的工作,所以我需要在当前时间戳添加到我的工作参数。 将当前时间戳添加为Bean中的属性,myPreparedStatmentSetter是否足够,或者是否还需要在其他位置添加作业参数?从spring文件中选取的jobparameters究竟在哪里?

如果我需要添加时间戳到这里的bean是一个问题 - 我的存储过程只需要kID作为参数,则我不需要当前时间戳传递给存储过程,那么为什么我需要添加相同的myPreparedStatmentSetter

另外我如何将当前时间戳记添加到没有Java代码的xml文件中?

编辑

这里是我的jobLauncher豆

块报价

块报价

+1

jobParameter需要提供给joblauncher这样告诉更多您如何开展工作。 jobParameter与步骤或阅读器配置无关。此外,只是建议使用Java配置而不是xml。 –

+0

@Sabir Khan我正在使用CommandLineJobRunner – user2713255

回答

0

我猜你已经将KId添加到工作参数中了。将以下内容添加到您的joblaucher.run()方法中。

new JobParametersBuilder() 
.addLong("time",System.currentTimeMillis()) 
.addLong("KId",<your KID>) 
.toJobParameters(); 
1

添加手工“随机”的工作参数,同时它可以工作,是不是让周围的工作实例已经存在错误最为理想的方式。相反,您应该考虑在工作中添加JobParametersIncrementer。 Spring提供RunIdIncrementer作为这个开箱即用的实现。它配置的工作看起来像下面这样:

@Bean 
public Job myJob() { 
    return jobBuilderFactory.get("myJob") 
          .incrementer(runIdIncrementer()) 
          .start(step1()) 
          .build(); 
} 

@Bean 
public JobParametersIncrementer runIdIncrementer() { 
    return new RunIdIncrementer(); 
}