首页 > 解决方案 > Spring Batch JdbcCursorItemReader moving cursor backward

问题描述

In spring batch JdbcCursorItemReader is ResultSet processing is TYPE_FORWARD_ONLY.

In my case, I need to point the cursor to 1 row back, hence I want to set TYPE_SCROLL_SENSITIVE, so that I can go back.

Any idea how to do it in spring batch or some workaround?

<bean id="databaseItemReader"
        class="org.springframework.batch.item.database.JdbcCursorItemReader">
        <property name="dataSource" ref="dataSource" />
        <property name="sql"
            value="select * from document udd, field uff where uff.docid = udd.docid AND uff.field_name IN ('address','contractNb','city','locale','login','mobile','name','phone') ORDER BY udd.docid, uff.field_name ASC" />
        <property name="rowMapper">
            <bean class="com.migration.springbatch.UDocumentResultRowMapper" />
        </property>
        <property name="verifyCursorPosition" value="false"/>
    </bean>

标签: spring-batch

解决方案


ItemReaderSpring Batch中 an 的合约只是转发的,JdbcCursorItemReader根据这个合约执行(因此是TYPE_FORWARD_ONLY)。因此,一旦打开光标,就不可能将其倒回。

也就是说,当底层资源是事务性的(例如数据库或 JMS 队列)时,调用 read 可能会在回滚场景中的后续调用中返回相同的逻辑项。

请在此处的文档中找到更多详细信息:https ://docs.spring.io/spring-batch/4.0.x/reference/html/readersAndWriters.html#itemReader


推荐阅读