Spring 批处理 - 使用 JdbcCursorItemReader 的 Bean 继承
Spring Batch - Bean Inheritance with JdbcCursorItemReader
我遇到了 Spring 批处理的问题,这通常很简单。
我有多个步骤,面向块处理。对于每个步骤,我想使用相同的 ItemReader。
<bean id="myItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader"
scope="step">
<property name="dataSource" ref="dataSource" />
<property name="sql"
value="select * from ...."/>
<property name="rowMapper">
<bean class="MyRowMapper" />
</property>
</bean>
这是我的步骤声明:
<step id="mySpecificStep">
<tasklet>
<chunk reader="mySpecificItemReader"
writer="myItemWriter"
commit-interval="${commit-interval}"
skip-policy="skipPolicy">
</chunk>
</tasklet>
</step>
我的请求有一些参数,我想用 PreparedStatementSetter 替换它们。
所以我的意图是创建多个 bean(针对每个步骤),以便为每个 bean 调用特定的 PreparedStatement。
<bean id="mySpecificItemReader" parent="myItemReader" >
<property name="preparedStatementSetter" ref="mySpecificStatement"/>
</bean>
<bean id="mySpecificStatement" class="PreparedStatementSpecificProduct">
<property name="product" value="XXX" />
</bean>
我有以下错误:
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'preparedStatementSetter' of bean class [org.springframework.aop.scope.ScopedProxyFactoryBean]: Bean property 'preparedStatementSetter' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
我做错了什么?如果您需要更多详细信息,请告诉我。
感谢您的帮助。
好的,我终于成功了!感谢@M。 Deinum,我在声明中使用了摘要。这是我的做法:
<bean id="myItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader"
scope="step" abstact="true">
<bean id="mySpecificItemReader" parent="myItemReader" scope="step">
<property name="preparedStatementSetter">
<bean id="mySpecificStatement" class="PreparedStatementSpecificProduct">
<property name="product" value="XXX" />
</bean>
</property>
</bean>
谢谢大家的帮助!
我遇到了 Spring 批处理的问题,这通常很简单。
我有多个步骤,面向块处理。对于每个步骤,我想使用相同的 ItemReader。
<bean id="myItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader"
scope="step">
<property name="dataSource" ref="dataSource" />
<property name="sql"
value="select * from ...."/>
<property name="rowMapper">
<bean class="MyRowMapper" />
</property>
</bean>
这是我的步骤声明:
<step id="mySpecificStep">
<tasklet>
<chunk reader="mySpecificItemReader"
writer="myItemWriter"
commit-interval="${commit-interval}"
skip-policy="skipPolicy">
</chunk>
</tasklet>
</step>
我的请求有一些参数,我想用 PreparedStatementSetter 替换它们。
所以我的意图是创建多个 bean(针对每个步骤),以便为每个 bean 调用特定的 PreparedStatement。
<bean id="mySpecificItemReader" parent="myItemReader" >
<property name="preparedStatementSetter" ref="mySpecificStatement"/>
</bean>
<bean id="mySpecificStatement" class="PreparedStatementSpecificProduct">
<property name="product" value="XXX" />
</bean>
我有以下错误:
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'preparedStatementSetter' of bean class [org.springframework.aop.scope.ScopedProxyFactoryBean]: Bean property 'preparedStatementSetter' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
我做错了什么?如果您需要更多详细信息,请告诉我。
感谢您的帮助。
好的,我终于成功了!感谢@M。 Deinum,我在声明中使用了摘要。这是我的做法:
<bean id="myItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader"
scope="step" abstact="true">
<bean id="mySpecificItemReader" parent="myItemReader" scope="step">
<property name="preparedStatementSetter">
<bean id="mySpecificStatement" class="PreparedStatementSpecificProduct">
<property name="product" value="XXX" />
</bean>
</property>
</bean>
谢谢大家的帮助!