org.springframework.jdbc.CannotGetJdbcConnectionException с Spring 3.0 JdbcTemplate и многопоточность - PullRequest
0 голосов
/ 10 апреля 2019

В многопоточности, при использовании Spring jdbctemplate с Spring 3.0, получая

Не удалось получить JDBC-соединение

или

Нет буфераошибка доступного пространства

Я создал приложение, в котором я использую многопоточность для выполнения операций с записями объемом около 100 тыс.Я использовал Spring jdbctemplate для работы с базой данных.Я создаю 50 потоков для обработки записей по 100 тыс., Поэтому одному потоку придется обрабатывать записи по 20 тыс.Для каждой записи будет выполнено несколько операций, которые будут сохранены в нескольких таблицах.

for (int j = 0; j < nMaxThreads; j++) {
    Thread thTread = new Thread() {
    @Override
        public void run() {
            logger.error(this.getName() + " Started");
            try {
                -- Process and do database operations --
            } catch (Exception e) {
            logger.error("Exception occured while thread: " + this.getName(), e);
        }
        logger.error(this.getName() + " Finished");
    }
};
thTread.setName("JobCalcThread-" + j);
thTread.start();

После обработки определенных записей я случайно получаю ошибку ниже, и все потоки прекращают обработку.

2019-04-10 19:50:17 ERROR TaxCalculateHelper:387 - Exception Occured: 
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:575)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:818)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:874)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:882)
    at com.pnp.dao.TaxCalcDao.saveUserCurrentTaxInfo(TaxCalcDao.java:670)
    at com.pnp.taxcalculator.TaxCalculateHelper.startTaxCalcProcessForUsers(TaxCalculateHelper.java:378)
    at com.pnp.taxcalculator.TaxCalculateHelper$1.run(TaxCalculateHelper.java:351)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

или

Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:276)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2027)
    ... 23 more

Примечание: Все потоки выполняют операции с одинаковыми таблицами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...