В многопоточности, при использовании 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
Примечание: Все потоки выполняют операции с одинаковыми таблицами