Spring Batch:忽略了可重新启动的属性

时间:2012-06-15 13:41:09

标签: instance spring-batch job-scheduling

我想要每分钟运行一次批处理作业。调度程序按计划每分钟启动一次作业,但在第一次启动后,正在使用相同的作业实例。我的ItemReader中有一个标志,一旦代码执行一次就会被触发,所以在每次后续启动时使用相同的实例,在第一次运行后没有新的内容被读取。

我查看了文档(http://static.springsource.org/spring-batch/reference/html/configureJob.html),并说它为作业bean设置了restartable属性为false。这应该强制在每次调用时创建一个新实例(第4.1.1节“可重启性”)。

这还没有解决问题。如果我写出“this.hashCode()”,每次调用reader类时都会得到相同的哈希ID。

我尝试在作业上放置restartable属性,以及它的父(它是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>

1 个答案:

答案 0 :(得分:1)

做更多的研究,将属性scope =“step”添加到我的reader类bean中纠正了这个问题。您可以参考文档的第5章,并阅读有关后期绑定的内容。