【问题标题】:Spring Batch - Bean Inheritance with JdbcCursorItemReaderSpring Batch - 使用 JdbcCursorItemReader 进行 Bean 继承
【发布时间】:2019-11-25 12:44:11
【问题描述】:

我遇到了 Spring Batch 的问题,这通常很简单。

我有多个步骤,面向块处理。对于每个步骤,我都想使用相同的 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?

我做错了什么?如果您需要更多详细信息,请告诉我。

感谢您的帮助。

【问题讨论】:

  • 对不起,你是对的,所以我已经删除了我的答案。让我重新看看你的设置。
  • 您查看的是哪个版本的批处理?我正在查看的版本只有 sql 属性的 getter。
  • 我目前在 3.0.6.RELEASE。可悲的是,我无法升级它...
  • 将父级标记为abstract

标签: java spring spring-batch


【解决方案1】:

好的,我终于成功了!感谢@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>

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多