2016-03-24 1 views
1

Я ухватил java.sql.SQLTransientConnectionException: springHikariCP - соединение недоступно, запрос истекает после 30001ms.java.sql.SQLTransientConnectionException: spring HikariCP - соединение недоступно, запрос истекает afte

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

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

JDK - 1.8.0_73.

HikariCP - 2.4.5.

Весна - 4.2.5.RELEASE.

<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 
+0

В примере с HikariCP вы задаете имя dataSourceClassName с именем driverClassName. Это может вызвать проблему? – ydemartino

+0

Извините, исправлено. Упомянутая проблема заключается в правильном вызове CP-свойства - dataSourceClassName. – Arthur

+0

Помогает ли [этот ответ] (http://stackoverflow.com/questions/23369818/how-to-configure-hikari-cp-for-hsql-in-a-spring4-context)? – brettw

ответ

1

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

Вместо этого вы должны добавить имя хоста, dbname и т. Д. В качестве свойств. См. Пример на 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> 

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

+0

Нет свойства portNumber для HSQL - исключение. Без этого свойства - тот же результат - тайм-аут. – Arthur

+0

Я отредактировал свой ответ для альтернативного пути без dataSourceClassName, скажите мне, если это работает лучше – ydemartino

+0

Такая же проблема ... :-( – Arthur

Смежные вопросы