Я работаю над приложением Spring-MVC, где мы используем HikariCP.Мы используем PostgreSQL в качестве базы данных с 150 подключениями в PostgreSQL и 15 размерами пула для Hikari.Время от времени мы внезапно получаем ошибку, что тайм-аут произошел.Ошибка уходит через 10-20 секунд, но она замедляет весь сервер.Много раз это даже не занято.Я пробовал некоторые другие темы и добавил обнаружение утечек, но без помощи.Есть идеи, что я делаю не так или как это исправить?
Журнал ошибок:
java.sql.SQLTimeoutException: Timeout after 30000ms of waiting for a connection.
at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:233)
at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:183)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:110)
root-context.xml:
<beans:bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<beans:property name="dataSourceClassName" value="org.postgresql.ds.PGSimpleDataSource"/>
<beans:property name="minimumIdle" value="2"/>
<beans:property name="maximumPoolSize" value="17" />
<beans:property name="maxLifetime" value="300000" />
<beans:property name="idleTimeout" value="25000" />
<beans:property name="leakDetectionThreshold" value="3000"/>
<beans:property name="dataSourceProperties">
<beans:props>
<beans:prop key="url">jdbc:postgresql://localhost:5432/DB_NAME</beans:prop>
<beans:prop key="user">USERnamE</beans:prop>
<beans:prop key="password">PASSWORD</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
<!-- Hibernate 4 SessionFactory Bean definition -->
<beans:bean id="hibernate4AnnotatedSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="packagesToScan" value="com.ourapp.spring.model"/>
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</beans:prop>
<beans:prop key="hibernate.show_sql">false</beans:prop>
<beans:prop key="hibernate.jdbc.batch_size">50</beans:prop>
<beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
<beans:prop key="cache.use_second_level_cache">true</beans:prop>
<beans:prop key="cache.use_query_cache">true</beans:prop>
<beans:prop key="hibernate.order_updates">true</beans:prop>
<beans:prop key="show_sql">false</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
Любая помощь будет полезной.Спасибо.: -)
Обновление
Типичное сохранение и чтение:
@Repository
@Transactional
public class AppDetailsDAOImpl implements AppDetailsDAO {
private final SessionFactory sessionFactory;
@Autowired
public AppDetailsDAOImpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public Long saveAppDetails(AppDetails appDetails, int personid) {
Session session = this.sessionFactory.getCurrentSession();
Person person = (Person) session.get(Person.class, personid);
if (person != null) {
person.getAppDetailsSet().add(appDetails);
appDetails.setUserApps(person);
Long saveid = (Long) session.save(appDetails);
session.flush();
return saveid;
}
return (long) 0;
}
@Override
public AppDetails getAppDetailsByAppId(Long appId) {
Session session = this.sessionFactory.getCurrentSession();
return (AppDetails) session.get(AppDetails.class, appId);
}
}