2
我有一個作業需要多次使用不同的作業參數運行。我想建立一個JdbcCursorItemReader執行作業的查詢時,itemReader配置是這樣的:將作業參數用作JdbcCursorItemReader中的預準備語句參數
<bean id="tpsItemReader"
class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="myDataSource"/>
<property name="sql" value="#{sqlQueries['tps.findStuffforSomeSubset']}"/>
<property name="preparedStatementSetter">
<bean class="com.initech.reports.tps.ParameterSetter">
<!-- can't hardcode this, I want a job parameter here -->
<constructor-arg value="A"/>
</bean>
</property>
<property name="rowMapper">
<bean class="com.initech.reports.tps.CustomerRowMapper"/>
</property>
</bean>
和作業配置是這樣的:
<batch:job id="tpsReportJob">
<batch:step id="tpsReportJob.generateReport">
<batch:tasklet>
<batch:chunk reader="tpsItemReader"
processor="tpsItemProcessor"
writer="tpsItemWriter" commit-interval="100000"/>
</batch:tasklet>
</batch:step>
</batch:job>
的parameterSetter是相當小:
package com.initech.reports.tps;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.springframework.jdbc.core.PreparedStatementSetter;
public class ParameterSetter implements PreparedStatementSetter {
private final String x;
public ParameterSetter(String x) {this.x = x;}
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, x);
}
}
這是使用spring-batch 2.1.8。
如何獲取作業參數到查詢中?
我想我接近,我試圖改變參數設置器配置到:
<bean class="com.initech.reports.tps.ParameterSetter">
<constructor-arg value="#{jobParameters['myParam']}"/>
</bean>
,但我得到這個錯誤:
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'jobParameters' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:208)
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:72)
at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:52)
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:93)
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:88)
at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:139)
... 51 more
我發現a very similar question,一個和之間的區別這是我沒有讀者類來註釋,我只是有xml條目,因爲我想避免必須創建我自己的itemReader。 (我可以嘗試重寫jdbcCursorItemReader類只是爲了能夠進行註解...)
+1我移植我的配置從XML以註解爲基礎,並忘記將'''scope =「step」'''作爲'''@Scope(「step」)'''。 – opyate
Nathan,你在哪裏寫了SQL&where應該配置參數值=「#{jobParameters ['myParam']}」..你可以請分享它.. – DEADEND