java.sql.SQLTransientConnectionException: spring HikariCP - соединение недоступно, время ожидания запроса истекло после

Я поймал java.sql.SQLTransientConnectionException: springHikariCP - соединение недоступно, время запроса истекло через 30001 мс.

Первый блок кода работает хорошо, второй (CP) не работает.

Что не так и как это исправить?

JDK-1.8.0_73.

ХикариКП - 2.4.5.

Пружина - 4.2.5.ВЫПУСК.

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="${connection.driverClassName}"/>
   <property name="username" value="${connection.userName}"/>
   <property name="password" value="${connection.password}"/>
   <property name="url" value="${connection.url}"/>
    </bean>

CP

   <bean id="hikariConfiguration" class="com.zaxxer.hikari.HikariConfig">
    <property name="poolName" value="springHikariCP"/>
    <property name="dataSourceClassName" value="${connection.dataSourceClassName}"/>
    <property name="maximumPoolSize" value="${connection.pool.maximumPoolSize}"/>
    <property name="idleTimeout" value="${connection.pool.idleTimeout}"/>
    <property name="dataSourceProperties">
   <props>
       <prop key="url">${connection.url}</prop>
       <prop key="user">${connection.userName}</prop>
       <prop key="password">${connection.password}</prop>
   </props>
  </property>
   </bean>
   <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-  method="close">
  <constructor-arg ref="hikariConfiguration"/>
  </bean>
//...............
#CONNECTION
connection.dataSourceClassName=org.hsqldb.jdbc.JDBCDataSource
connection.url=jdbc:hsqldb:mem:dbtest-local
connection.userName=sa
connection.password=

#POOL
connection.pool.maximumPoolSize=1
connection.pool.idleTimeout=28500

#HIBERNATE
hibernate.hbm2ddl.auto=create-drop
hibernate.dialect=H2Dialect
hibernate.show_sql=true

person Arthur    schedule 24.03.2016    source источник
comment
В вашем примере с HikariCP вы устанавливаете dataSourceClassName с помощью driverClassName. Это может вызвать проблему?   -  person ydemartino    schedule 24.03.2016
comment
Извините, исправлено. Упомянутая проблема связана с правильным вызовом свойства CP - dataSourceClassName.   -  person Arthur    schedule 24.03.2016
comment
Помогает ли этот ответ?   -  person brettw    schedule 24.03.2016
comment
Я сейчас проверяю.   -  person Arthur    schedule 24.03.2016


Ответы (1)


Если вы используете dataSourceClassName, вы не должны указывать URL-адрес jdbc.

Вместо этого вы должны добавить хост, имя базы данных и т. д. в качестве свойств. См. пример на github:

dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
dataSource.user=test
dataSource.password=test
dataSource.databaseName=mydb
dataSource.portNumber=5432
dataSource.serverName=localhost

В противном случае вам не следует использовать dataSourceClassName. Попробуйте с:

<bean id="hikariConfiguration" class="com.zaxxer.hikari.HikariConfig">
    <property name="poolName" value="springHikariCP" />
    <property name="maximumPoolSize" value="${connection.pool.maximumPoolSize}" />
    <property name="idleTimeout" value="${connection.pool.idleTimeout}" />
    <property name="jdbcUrl" value="${connection.url}" />
    <property name="dataSourceProperties">
        <props>
            <prop key="user">${connection.userName}</prop>
            <prop key="password">${connection.password}</prop>
        </props>
    </property>
</bean>

Это работает для меня на местном уровне.

person ydemartino    schedule 24.03.2016
comment
Нет свойства portNumber для HSQL - исключение. Без этого свойства - тот же результат - тайм-аут. - person Arthur; 24.03.2016
comment
Я отредактировал свой ответ альтернативным способом без dataSourceClassName, скажите, работает ли это лучше - person ydemartino; 24.03.2016
comment
Я думаю, что что-то не так с той частью, которую мы не видим, потому что мне удалось запустить тестовый проект с этой конфигурацией. - person ydemartino; 24.03.2016
comment
Да с hsqldb 2.3.3 - person ydemartino; 25.03.2016