带JobParameters的Spring Batch SQL命令

时间:2016-01-20 11:53:15

标签: spring-batch

我是Spring-batch的新手,在这里我使用以下读者语句从DB获取一些数据。在这里,我需要动态传递值(通过参数)。

<bean id="ItemReader"
            class="org.springframework.batch.item.database.JdbcCursorItemReader">
            <property name="dataSource" ref="dataSource" />
            <property name="sql">
                <value>
                <![CDATA[
    select * from table where section = #{jobParameters['section']}
    ]]>
                </value>
            </property>
            <property name="rowMapper">
                <bean class="xyzRowMapper" />
            </property>
        </bean>

JUnit代码:

JobParameters jobParameters = = new JobParametersBuilder()
                    .addString("section", section);

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

正如官方Spring Batch文档的§5.4 Late Binding of Job and Steps Attributes中所述,您需要在步骤中添加scope="step"

  

为了使用后期绑定,需要使用步骤范围   实际上,在步骤开始之前,bean无法实例化   允许找到属性。因为它不属于   默认情况下,Spring容器必须显式添加范围,   通过使用批处理命名空间或通过包含bean定义   显式用于StepScope(但不是两者)

给予:

<bean id="ItemReader" scope="step" class="org.springframework.batch.item.database.JdbcCursorItemReader">
    <property name="dataSource" ref="dataSource" />
    <property name="sql">
        <value>
            <![CDATA[
                select * from table where section = #{jobParameters['section']}
            ]]>
        </value>
    </property>
    <property name="rowMapper">
        <bean class="xyzRowMapper" />
    </property>
</bean>
相关问题