java-在JdbcCursorItemReader中将作业参数用作准备好的语句参数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-在JdbcCursorItemReader中将作业参数用作准备好的语句参数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2780字,纯文字阅读大概需要4分钟。
内容图文
我有一个作业必须使用不同的作业参数运行多次.我想设置一个JdbcCursorItemReader来执行作业查询,itemReader的配置如下:
<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.
如何将job参数放入查询中?
我想我接近了,我尝试将参数设置器配置更改为:
<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类,以便能够对其进行注释…)
解决方法:
所要做的就是将scope属性添加到parameterSetter类上:
<bean class="com.initech.reports.tps.ParameterSetter"
scope="step">
<constructor-arg value="#{jobParameters['myParam']}"/>
</bean>
内容总结
以上是互联网集市为您收集整理的java-在JdbcCursorItemReader中将作业参数用作准备好的语句参数全部内容,希望文章能够帮你解决java-在JdbcCursorItemReader中将作业参数用作准备好的语句参数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。