当前位置: 首页 > 知识库问答 >
问题:

使用JdbcCursorItemReader的Spring批处理Bean继承

扶冠宇
2023-03-14

我在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>

我的请求有一些参数,我想用准备状态设置器替换它们。

所以我的意图是为每个bean创建多个bean(对于每个步骤),以便为每个bean调用特定的准备语句。

<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?

我做错了什么?如果你需要更多的细节,请告诉我。

谢谢你的帮助。

共有1个答案

漆雕宏浚
2023-03-14

好了,我终于成功了!感谢@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 Batch处理MySQL数据库表中的7637064行。我成功地处理了较小的表,但当JdbcCursorItemReader尝试打开光标时,该表中的大量行导致了OutOfMemoryError异常。 我可能可以通过向它扔一个更大的Xmx来解决这个问题,但在我看来,Spring Batch应该有办法处理这个问题,我可能只是缺少一个关键的配置部分。 Spring批配

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 我有一个spring批处理应用程序,它从文件中读取数据,进行一些处理,最后编写一个定制的输出。这一切都是一步到位的。在下一步中,我将使用一个tasklet来归档输入文件(移动到另一个文件夹)。这个应用程序运行良好。但是,现在我需要在远程服务器上对sftp输出文件进行进一步处理。我找到了一种使用spring integration实现sftp的方法,在这里我创建了一个输入通道,该通道将反馈给outb

  • 我使用的是Spring Batch 2.1.8。释放我有一个文件,它由一些头信息和一些需要处理的记录组成。 我有一个使用面向块处理的步骤。该步骤包含ItemReader和ItemWriter的实现。ItemReader实现是线程安全的,而ItemWriter不是。 我想在处理(或写入)任何记录之前使用标题信息。在继续使用面向块的处理时,如何确保这一点? 建议的解决方案:一种解决方案可以是编写一个预

  • 顺便说一句:我的应用程序是一些REST控制器和一些批处理作业的组合。那么使用云数据流有意义吗?如果没有,那么是否有更好的控制台管理器用于批处理作业(如重新启动、取消作业门户)等?

  • 我是新的Spring批与引导。我在使用postgres配置jobRepositoryFactory bean作为数据库时遇到了一个问题。下面是我的配置类。 下面是Spring boot App run的输出 我已经在我的configuration类中配置了bean。我错过了什么?