Spring Data JPA закрывается соеденение с БД

138
19 октября 2019, 17:00

Имеется Spring boot приложение, которое перегоняет большое количество данных получаемых по API в удаленную БД (MySQL). В качестве пула соединений использую HikariCP, вот его конфигурация в момент запуска приложения:

HikariPool-1 - configuration: 
allowPoolSuspension.............false 
autoCommit......................false 
catalog.........................none 
connectionInitSql...............none 
connectionTestQuery.............none 
connectionTimeout...............30000 
dataSource......................none 
dataSourceClassName.............none 
dataSourceJNDI..................none 
dataSourceProperties............{password=<masked>} 
driverClassName................."com.mysql.cj.jdbc.Driver" 
healthCheckProperties...........{} 
healthCheckRegistry.............none 2019-02-21 13:00:32:351 [main] DEBUG c.z.h.HikariConfig.logConfiguration() - idleTimeout.....................600000 
initializationFailTimeout.......1 
isolateInternalQueries..........false 
jdbcUrl.........................jdbc:mysql://url/db_name?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&failOverReadOnly=false 
leakDetectionThreshold..........0 
maxLifetime.....................1800000 
maximumPoolSize.................10 
metricRegistry..................none 
metricsTrackerFactory...........none 
minimumIdle.....................10 
password........................<masked> 
poolName........................"HikariPool-1" 
readOnly........................false 
registerMbeans..................false 
scheduledExecutor...............none 
schema..........................none 
threadFactory...................internal 
transactionIsolation............default 
username........................"name" 
validationTimeout...............5000 

В течении работы появляется лог: HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)

А через несколько минут работы валится исключение:

2019-02-21 12:56:22:323 [HikariPool-1 connection closer] DEBUG c.z.h.p.PoolBase.quietlyCloseConnection() - HikariPool-1 - Closing connection com.mysql.cj.jdbc.ConnectionImpl@4169569c: (connection is dead) 
2019-02-21 12:56:22:327 [HikariPool-1 connection adder] DEBUG c.z.h.p.HikariPool.createPoolEntry() - HikariPool-1 - Cannot acquire connection from data source 
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136)
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369)
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198)
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467)
    at com.zaxxer.hikari.pool.HikariPool.access$100(HikariPool.java:71)
    at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:706)
    at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:692)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
    at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
    at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:91)
    at com.mysql.cj.NativeSession.connect(NativeSession.java:152)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
    ... 14 common frames omitted
Caused by: java.net.ConnectException: В соединении отказано (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155)
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65)
    ... 17 common frames omitted
2019-02-21 12:56:28:238 [HikariPool-1 housekeeper] DEBUG c.z.h.p.HikariPool.logPoolState() - HikariPool-1 - Pool stats (total=0, active=0, idle=0, waiting=1) 
2019-02-21 12:56:30:417 [HikariPool-1 connection adder] DEBUG c.z.h.p.HikariPool.createPoolEntry() - HikariPool-1 - Cannot acquire connection from data source 

Пробовал устанавливать max-lifetime: 25800, maximum-pool-size: 20, minimum-idle: 0, idle-timeout: 30000 - результат всегда такой же. В чем может быть проблема?

UPD:

Вывод таймаутов из БД.

connect_timeout 10
deadlock_timeout_long 50000000
deadlock_timeout_short 10000
delayed_insert_timeout 300
innodb_lock_wait_timeout 50
innodb_rollback_on_timeout OFF
interactive_timeout 28800
lock_wait_timeout 31536000
net_read_timeout 30
net_write_timeout 600
slave_net_timeout 3600
thread_pool_idle_timeout 60
wait_timeout 28800

UPD2.

В ходе работы выходит лог:

[yourPoolName connection closer] DEBUG c.z.h.p.PoolBase.quietlyCloseConnection() - yourPoolName - Closing connection com.mysql.cj.jdbc.ConnectionImpl@742e0612: (connection has passed maxLifetime) 
[yourPoolName connection adder] DEBUG c.z.h.p.HikariPool.call() - yourPoolName - Added connection com.mysql.cj.jdbc.ConnectionImpl@16e8fb27 

UPD3

Выяснилось, что на удаленном сервере падает MySQL. Провайдер говорит нехватка памяти. Что может забивать память? Может какой-то кэш MySQL?

Answer 1

Проблема заключалась вовсе не в Hikari, Hibernate и т.д. В момент загрузки данных в БД, я так же использовал com.jcraft.jsch.JSch библиотеку, для загрузки изображений и не правильно использовал настройки соединения с сервером, чем вызывал переполнение памяти.

READ ALSO
Сигнатура конструктора в интерфейсе

Сигнатура конструктора в интерфейсе

Почему нельзя в интерфейсе задать сигнатуру конструктора без реализации?

116
При использовании Spring Data JpaRepository настройки через JavaConfig, вылетает NoSuchBeanDefinitionException

При использовании Spring Data JpaRepository настройки через JavaConfig, вылетает NoSuchBeanDefinitionException

Уже неделю голову ломаю, вроде всё так и всё на месте, но что-то не вижу, подскажите, пожалуйста, что не учёл

117
Перемещение isp файла за пределы папки web

Перемещение isp файла за пределы папки web

Начал осваивать сервлеты и столкнулся с таким вопросом Файлы jsp лежат в папке web Можно ли их вынести в папку src например? И стоит ли во вьюшку...

102
InputStreamReader ready() перед чтением неправильно возращает результат

InputStreamReader ready() перед чтением неправильно возращает результат

Когда программа ещё не читала из потока, метод ready() вернёт false, хотя на самом деле в потоке есть что читатьА если один раз прочитать, то дальше...

134