我有一个批处理作业,我想每分钟运行一次。调度程序按计划每分钟启动一次作业,但在第一次启动后,将使用相同的作业实例。我的 ItemReader 中有一个标志,一旦代码执行一次就会触发,因此每次后续启动都使用相同的实例,在第一次运行后不会读取任何新内容。
我查看了文档(http://static.springsource.org/spring-batch/reference/html/configureJob.html),它说将作业bean的restartable属性设置为false。这应该强制每次调用都创建一个新实例(第 4.1.1 节可重启性)。
这并没有解决问题。如果我写出“this.hashCode()”,每次调用读取器类时都会得到相同的哈希 ID。
我尝试将可重启属性放在作业及其父级(SimpleJob 的扩展)上,但两者都没有帮助。
我还在作业启动器的 jobParameters 中附加了一个时间戳,因此每个作业都有唯一的参数。这仍然不能解决它。作业名称始终相同。
有什么我想念的吗?
<bean id="simpleJob" class="CustomJob" abstract="true">
<property name="jobRepository" ref="jobRepository"/>
<property name="restartable" value="false"/>
</bean>
<bean id="simpleStep" class="org.springframework.batch.core.step.item.SimpleStepFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="jobRepository" ref="jobRepository"/>
<property name="startLimit" value="100"/>
<property name="commitInterval" value="1"/>
</bean>
<batch:job id="myJob" parent="simpleJob">
<batch:step id="Step1" next="step2" parent="simpleStep">
<batch:tasklet>
<batch:chunk>
<batch:reader>
<bean class="myReader">
<property name="userName" value="***"/>
<property name="password" value="***"/>
<property name="url" value="***"/>
</bean>
</batch:reader>
<batch:writer>
<bean class="MyWriter">
<property name="dataSource" ref="dataSource"/>
<property name="updateOnKeyConflict" value="false"/>
<property name="table" value="myTable"/>
</bean>
</batch:writer>
</batch:chunk>
</batch:tasklet>
</batch:step>
<batch:step id="step2" next="step3" parent="simpleStep">
<batch:tasklet>
<bean class="queryTasklet">
<property name="dataSource" ref="dataSource"/>
<property name="sql" value="***"/>
</bean>
</batch:tasklet>
</batch:step>
<batch:step id="step3" parent="simpleStep">
<batch:tasklet>
<batch:chunk>
<batch:reader>
<bean class="mySeriesReader">
<property name="userName" value="***"/>
<property name="password" value="***"/>
<property name="url" value="***"/>
</bean>
</batch:reader>
<batch:writer>
<bean class="mySeriesWriter">
<property name="timeSeriesDAO" ref="timeSeriesDAO"/>
<property name="updateOnKeyConflict" value="false"/>
</bean>
</batch:writer>
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>