Сохранение порции данных в БД из Java-приложения - PullRequest
0 голосов
/ 22 января 2019

У меня есть Java Batch Program, которая запускается из BPEL-процесса, используемого для вставки набора записей в БД.

Размер записи может варьироваться, но в среднем составляет от 20000 до 40000.

Мой пользовательский пакет Java извлекает данные из Excel, загруженные из стороннего приложения в расположение сервера.

Для выполнения операции DML я использовал инфраструктуру Hibernate / Spring JDBC.

Обратитесь к моему конфигурационному файлу пружины, как показано ниже:

<context:component-scan base-package="mybasepackage" />

<bean id="myProps"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath*:myDB.properties</value>
        </list>
    </property>
    <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${DB_DRIVER}" />
    <property name="url" value="${DB_URL}" />
    <property name="username" value="${DB_USER}" />
    <property name="password" value="${DB_PASSWORD}" />
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="mypackage" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle12cDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.jdbc.batch_size">20</prop>
            <prop key="hibernate.c3p0.min_size">5</prop>
            <prop key="hibernate.c3p0.max_size">10</prop>
            <prop key="hibernate.c3p0.max_size">7000</prop>
        </props>
    </property>
</bean>

<bean id="myBatchDao"
    class="mypackage.MyBatchDaoImpl">
    <property name="jdbcTemplate" ref="jdbcTemplate" />
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="myBatchService"
    class="mypackage.MyBatchServiceImpl">
    <property name="myBatchDao" ref="myBatchDao" />
</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

   <tx:annotation-driven transaction-manager="transactionManager" />

Я уже использую c3p0 для ConnectionPooling, а также посетил следующие ссылки:

link1 link2

Но все же я получаю следующее исключение ::

<org.hibernate.engine.jdbc.spi.SqlExceptionHelper> <BEA-000000> <IO Error: Got minus one from a read call, connect lapse 6370 ms., Authentication lapse 0 ms.>
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction;nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
at org.springframework.orm.hibernate5.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:564)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...