Как сохранить соединение с Spring boot, Hibernate и Websphere Application Server

В моем приложении используются следующие фреймворки и сервер приложений:

  1. Spring Boot (1.5.4.RELEASE) с переходом в спящий режим.

  2. Websphere Application Server Liberty для Java на Bluemix

Приложение работает нормально, однако после тайм-аута соединения в течение нескольких часов. См. Следующее исключение:

2017-09-01T11:40:40.57+0900 [APP/PROC/WEB/0] OUT 2017-09-01 02:40:40,563 [http-nio-8080-exec-2] [5baba2cb-5bfd-4846-b8e0-8782aa729639] [] WARN  o.h.e.jdbc.spi.SqlExceptionHelper [SqlExceptionHelper.java:127] - SQL Error: -4499, SQLState: 08001 
2017-09-01T11:40:40.58+0900 [APP/PROC/WEB/0] OUT or socket output stream.  Error location: Reply.fill() - socketInputStream.read (-1).  Message: Connection timed out (Write failed). ERRORCODE=-4499, SQLSTATE=08001 

Я знаю, что для загрузки Spring необходимо установить свойства конфигурации в application.properties.

spring.datasource.testOnBorrow=true
spring.datasource.testWhileIdle=true
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.numTestsPerEvictionRun=3
spring.datasource.minEvictableIdleTimeMillis=600000
spring.datasource.validationQuery=SELECT 1

Однако я обнаружил, что в Spring boot 1.3+ мы должны использовать настройки, зависящие от реализации, используя их соответствующий префикс (spring.datasource.tomcat. , spring.datasource.hikari. и spring.datasource. dbcp2. *) и (очевидно) НЕ ПОДДЕРЖИВАЕТ Websphere Application Server Liberty Profile.

У меня вопрос: как мне настроить, чтобы соединения оставались активными (или возобновляли их)?

Заранее спасибо!


person Taketo Matsunaga    schedule 04.09.2017    source источник
comment
Реализация зависит от вашего источника данных, а НЕ от вашего сервера приложений. Судя по тому факту, что у вас используется spring.datasource, я предполагаю, что вы не используете spring.datasource.jndi-name и, следовательно, используете один из поддерживаемых пулов подключений. В противном случае свойства spring.datasource (кроме jndi-name) в значительной степени бесполезны, поскольку они должны быть настроены на сервере приложений.   -  person M. Deinum    schedule 04.09.2017
comment
Спасибо за помощь! Как вы и предполагали, я использую spring.datasource.url вместо spring.datasource.jndi-name. Есть ли способ активировать свойства spring.datasource.*, когда я использую spring.datasource.url ??? @ M.Deinum   -  person Taketo Matsunaga    schedule 04.09.2017


Ответы (1)


Какой источник данных вы используете? В нашем случае мы используем tomcat, который используется по умолчанию. Итак, у нас есть

# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.test-while-idle=true
spring.datasource.tomcat.time-between-eviction-runs-millis=300000
spring.datasource.tomcat.validation-query=SELECT 1
person Henry    schedule 23.10.2017