2016-07-22 54 views
0

我创建连接Connection con = ds.getConnection();(其中,ds是数据源)在开放的阅读器的和在靠近其关闭()的,如果连接在读者关闭关闭关闭错误()读者。JSR 352:连接是在分配步骤

但是当我运行多个分区作业,在作业过程中,我得到关闭连接错误

Caused by: java.sql.SQLException: [jcc][t4][10335][10366][3.58.82] Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003 DSRA0010E: SQL State = 08003, Error Code = -4,470

我认为当隔壁一个完成这种情况发生。

所以我的问题是,为什么会发生这种情况?如何处理连接?或者Java是否关注关闭连接?

我使用Java批次在WebSphere自由 UPDATE:

​​

}

完整的错误消息 [ERROR ] J2CA0024E: Method rollback, within transaction branch ID {XidImpl: formatId(57415344), gtrid_length(36), bqual_length(40), data(0000015645eff4470000000915937ff85f46c3ed056b19010aa5147e1183f8d3ae81c04c0000015645eff4470000000915937ff85f46c3ed056b19010aa5147e1183f8d3ae81c04c00000001)} of resource pool connectionManager[Pool], caught com.ibm.ws.exception.WsException: DSRA0080E: An exception was received by the Data Store Adapter. See original exception message: [jcc][t4][10335][10366][3.58.82] Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003. with SQL State : 08003 SQL Code : -4470

+1

您可以发布您的说明连接和ResultSet中使用的一些示例代码?你不是跨线程共享吗?你能也从server.xml中显示您的数据源/ JDBC配置和还提到,无论您是使用[这个问题]提到的“非共享连接”的方式(http://stackoverflow.com/questions/36935252/in-a-自由分批块步得到-结果集-IS-闭合时滚动个#)。 –

+0

是的,我正在使用Unshared Connections方法。只有当我在close()中关闭连接时,问题才会发生。如果我删除它,它工作正常。 –

+0

您正在关闭ResultSet之前的Connection。您应该先关闭ResultSet。 –

回答

0

我dont't知道JSR-352的批量处理完全相同的处理方式与Spring Batch的不一样,但...

在Spring Batch的,如果你有一个使用块处理什么,我想你可以做些什么来解决这个问题是摆在beforeRead()openConnection(),并在afterRead()closeConnection()一个Reader。

要做到这一点,你应该实现一个监听器。查看这些,以便了解我在说什么。

Spring Annotation Type BeforeRead

Interface ItemReadListener

相关问题