#java #spring-boot #database-connection #connection-pooling #application.properties
#java #пружинный ботинок #подключение к базе данных #объединение в пул соединений #application.properties
Вопрос:
Я создал микросервис, и он отлично работает в рабочем режиме в течение 3-4 недель. Это малообъемный сервис с небольшим количеством звонков каждые пару дней. Через 3-4 недели все запросы начинают завершаться сбоем с сообщением ниже в журналах
2019-04-15T22:33:17.628901587Z 2019-04-15 22:33:17.627 ПРЕДУПРЕЖДЕНИЕ 1 — [nio-8080-exec-5] o.s.jdbc.support.SQLErrorCodesFactory: Ошибка при извлечении имени базы данных — возврат к пустым кодам ошибок
2019-04-15T22:33:17.628928571Z org.springframework.jdbc.support.MetaDataAccessException: Ошибка при извлечении DatabaseMetaData; вложенным исключением является java.sql.SQLException: JZ0C0: соединение уже закрыто.
После перезапуска приложение начинает нормально работать еще несколько недель.
Любые предложения приветствуются.
Мой файл свойств приложения выглядит следующим образом
spring.datasource.max-active=6
spring.datasource.max-idle=0
spring.datasource.min-idle=0
spring.datasource.initial-size=1
spring.datasource.time-between-eviction-runs-millis=30000
spring.datasource.min-evictable-idle-time-millis=60000
spring.datasource.remove-abandoned=true
spring.datasource.remove-abandoned-timeout=120
spring.datasource.validation-query= select 1
spring.datasource.test-while-idle=true
spring.datasource.validation-interval=30
Комментарии:
1. Видишь, docs.spring.io/spring-boot/docs/current/reference/html /. … Какая библиотека пула подключений у вас есть?
2. Я использую пул tomcat. Я не уверен, что вызывает устаревание соединений
3. Существует дополнительный набор свойств для источника данных tomcat
spring.datasource.tomcat.*= # Tomcat datasource specific settings
. tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html4. Любые рекомендации о том, какие дополнительные свойства попробовать? Я, конечно, могу попробовать test-on-connect и test-on-return в true. Тем не менее, мне любопытно, что у меня уже есть значение remove-abandoned для true, кроме того, у меня также минимальный размер пула 0, так как у меня может быть устаревшее соединение, которое я не получаю
5.
testOnBorrow
,validationQuery
,removeAbandoned
,maxIdle
,minIdle
,initialSize
,jdbcInterceptors="ConnectionState;StatementFinalizer(useEquals=true), SlowQueryReport"
,