小编DBK*_*DBK的帖子

Spring Batch Reader的游标在JTA事务管理步骤中提前关闭

相关步骤的工作配置如下:

  • Step,Spring Batch Job Repository和业务存储库(使用各种数据源)都使用JTA事务管理器.
  • 步骤"myStep"使用Jdbc分页项目阅读器.
  • WebLogic,Oracle XE和/或EE

我想在"myStep"中分析Jdbc 光标项阅读器的性能,但是在第一次提交后,第二个块的第一次读取将失败,java.sql.SQLException:结果集已经关闭.

我怀疑JTA/XA驱动程序可能由于某种原因关闭了光标,所以我给了"myStep"一个简单的数据源事务管理器(在读者使用的数据源上),并且该步骤能够成功完成.这不是解决方案,因为这会破坏步骤的事务完整性.

我是否应该能够在JTA托管步骤中使用光标阅读器(使用下面描述的环境)?如果是这样,我的结尾可能配置不正确?

环境

  • 交易经理:<bean id="myTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
  • 数据源驱动程序:OracleXADataSource JDBC 6 11.1.0.7.0
  • WebLogic:12.1.3.0.0
  • Oracle DB 11g:Enterprise Edition 11.2.0.4.0
  • 操作系统:OSX或Linux

配置

<bean id="myTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>

<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/myDataSource"/>
    <property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>

<batch:step id="myStep" job-repository="myJobRepositoryFactory">
    <batch:tasklet transaction-manager="myTransactionManager">
        <batch:chunk
                reader="myReader"
                processor="myProcessor"
                writer="myWriter"
                commit-interval="100"
                processor-transactional="false"/>
        <batch:listeners>
            <batch:listener ref="myListener"/>
        </batch:listeners>
    </batch:tasklet>
</batch:step>

<bean id="myReader" class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step">
    <property name="dataSource" ref="myDataSource"/>
    <property name="sql" value="SELECT * FROM myHugeTable ORDER BY myColumn …
Run Code Online (Sandbox Code Playgroud)

java jta jdbc xa spring-batch

10
推荐指数
1
解决办法
1776
查看次数

标签 统计

java ×1

jdbc ×1

jta ×1

spring-batch ×1

xa ×1