Получение ошибки при выполнении запроса на обновление в пакетном обновлении DB2.
исключение:
org.springframework.dao.DataAccessResourceFailureException: PreparedStatementCallback; SQL [UPDATE DBO.STG_BILLPAY_INV_BT SET INV_SENT_FLG = ?, MDY_TS = ?, MDY_USR = ? WHERE INV_PDF_NM = ?]; [jcc][t4][2027][11212][3.53.70] A connection failed but has been re-established. The host name or IP address is "10.1.1.1" and the service name or port number is 446.
Special registers may or may not be re-attempted (Reason code = 2). ERRORCODE=-4498, SQLSTATE=08506; nested exception is com.ibm.db2.jcc.b.ClientRerouteException: [jcc][t4][2027][11212][3.53.70] A connection failed but has been re-established. The host name or IP address is "10.1.1.1" and the service name or port number is 446.
Special registers may or may not be re-attempted (Reason code = 2). ERRORCODE=-4498, SQLSTATE=08506
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:105)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:655)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:668)
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:956)
at com.comdata.batch.billtrust.dao.jdbc.ThinBillFileDaoJdbc.updateThinBillFile(ThinBillFileDaoJdbc.java:89)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy12.updateThinBillFile(Unknown Source)
at com.comdata.batch.billtrust.service.impl.ThinBillFileServiceImpl.getStagingThinBillData(ThinBillFileServiceImpl.java:297)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy15.getStagingThinBillData(Unknown Source)
at com.comdata.batch.billtrust.MainBatch.executeThinBilFileProcess(MainBatch.java:37)
at com.comdata.batch.billtrust.MainBatch.main(MainBatch.java:51)
Caused by: com.ibm.db2.jcc.b.ClientRerouteException: [jcc][t4][2027][11212][3.53.70] A connection failed but has been re-established. The host name or IP address is "10.1.1.1" and the service name or port number is 446.
Special registers may or may not be re-attempted (Reason code = 2). ERRORCODE=-4498, SQLSTATE=08506
at com.ibm.db2.jcc.b.bd.a(bd.java:304)
at com.ibm.db2.jcc.b.bd.a(bd.java:356)
at com.ibm.db2.jcc.t4.a.a(a.java:380)
at com.ibm.db2.jcc.t4.a.I(a.java:811)
at com.ibm.db2.jcc.t4.a.a(a.java:716)
at com.ibm.db2.jcc.t4.bb.T(bb.java:1240)
at com.ibm.db2.jcc.t4.bb.A(bb.java:610)
at com.ibm.db2.jcc.t4.db.o(db.java:771)
at com.ibm.db2.jcc.t4.db.g(db.java:141)
at com.ibm.db2.jcc.t4.db.a(db.java:38)
at com.ibm.db2.jcc.t4.t.a(t.java:32)
at com.ibm.db2.jcc.t4.sb.h(sb.java:141)
at com.ibm.db2.jcc.b.fm.bb(fm.java:1923)
at com.ibm.db2.jcc.b.gm.dc(gm.java:2551)
at com.ibm.db2.jcc.b.gm.q(gm.java:2678)
at com.ibm.db2.jcc.b.gm.Ub(gm.java:1966)
at com.ibm.db2.jcc.b.gm.addBatch(gm.java:1917)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.addBatch(NewProxyPreparedStatement.java:131)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:970)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:956)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:639)
... 32 more
Конфигурация XML: шаблон Spring JDBC с конфигурацией c3p0.
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="user" value="${billtrust.db.username}" />
<property name="password" value="${billtrust.db.password}" />
<property name="driverClass" value="${billtrust.db.driverClassName}" />
<property name="jdbcUrl" value="${billtrust.db.url}" />
<property name="initialPoolSize" value="1" />
<property name="maxPoolSize" value="10" />
<property name="minPoolSize" value="1" />
<property name="acquireIncrement" value="1" />
<property name="maxIdleTimeExcessConnections" value="300" />
<!-- maxConnectionAge: connection lifetime seconds -->
<property name="maxConnectionAge" value="7200" />
<!-- acquireRetryAttempts is how many times connect is retried before giving
up, 0 = infinite, should be 1 in unit tests -->
<property name="acquireRetryAttempts" value="30" />
<!-- acquireRetryDelay is how many wait time in ms between reconnect attempts -->
<property name="acquireRetryDelay" value="1000" />
<!-- checkoutTimeout: nbr of millis request will wait for a pooled connection
when maxed out -->
<property name="checkoutTimeout" value="60000" />
</bean>
Пример кода: пакетное обновление с использованием шаблона JDBC BatchPreparedStatementSetter.BatchPreparedStatementSetter prepareStatementSetter = new BatchPreparedStatementSetter () {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Calendar calendar = Calendar.getInstance();
java.sql.Timestamp ourJavaTimestampObject = new java.sql.Timestamp(calendar.getTime().getTime());
ps.setString(1, option);
ps.setTimestamp(2, ourJavaTimestampObject);
ps.setString(3, "JAVA");
ps.setString(4, thinBillFileUpdate.get(i));
}
@Override
public int getBatchSize() {
return thinBillFileUpdate.size();
}
};
int[] batchUpdate = this.getJdbcTemplate().batchUpdate(updateThinBillStagingTable, preparedStatementSetter);
Should get update the Database(DB2) successfully.