我是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);
任何人都可以帮忙吗?
答案 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>