Соединение не удалось, но было восстановлено. Имя хоста или IP-адрес - «*. *. *. *», А имя службы или номер порта - *** - PullRequest
0 голосов
/ 04 апреля 2019

Получение ошибки при выполнении запроса на обновление в пакетном обновлении 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.
...