Окружающая среда: Ubuntu 14.04.4
Приложение находится в разработке: Веб-приложение Spring 4.2.5.RELEASE MVC, MySQL с 151 + 1 MAX_CONNECTIONS, Hibernate, HikariCP в качестве источника данных с 20 подключениями на пул, 1 пул.
Инструмент автоматического развертывания: Jenkins
Контейнер развертывания: Tomcat 7
Предпосылки:
1. Приложение уже запущено и работает, доступно через Интернет.
Пример использования:
1. Войдите в командную строку mysql и выполните: show processlist;
2. Отметьте 20 подключений + 1 ваше в командной строке.
3. Инициируйте новое соберите Jenkins и подождите развертывания нового *.war на tomcat
4. выполнить: показать список процессов; в командной строке mysql
5. Наблюдайте 40 соединений + 1, ваше в командной строке.
6. Наблюдайте увеличение соединений до MAX_CONNECTIONS + 1, и после этого Jenkins не удается построить, потому что модульные тесты, требующие БД не работает.
Ожидаемое: не более 20 подключений в случае, когда к приложению осуществляется доступ, и вообще никаких подключений, если приложение находится в режиме ожидания (это поведение наблюдалось мной на моей локальной машине Windows 8.1 Pro для разработки)
Детали источника данных HikariCP:
@Bean
public LocalContainerEntityManagerFactoryBean getEntityManagerFactoryBean() {
LocalContainerEntityManagerFactoryBean sessionFactory = new LocalContainerEntityManagerFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan("com.myapp");
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
sessionFactory.setJpaVendorAdapter(vendorAdapter);
sessionFactory.setJpaProperties(hibernateProperties());
return sessionFactory;
}
private DataSource dataSource() {
final HikariDataSource ds = new HikariDataSource();
ds.setMaximumPoolSize(20);
ds.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
ds.addDataSourceProperty("url", "jdbc:mysql://localhost/myapp");
ds.addDataSourceProperty("user", "usr");
ds.addDataSourceProperty("password", "pwd");
ds.addDataSourceProperty("cachePrepStmts", true);
ds.addDataSourceProperty("prepStmtCacheSize", 250);
ds.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
ds.addDataSourceProperty("useServerPrepStmts", true);
return ds;
}
private Properties hibernateProperties() {
final Properties properties = new Properties();
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.hbm2ddl.auto", "validate");
properties.put("hibernate.implicit_naming_strategy", "legacy-jpa");
return properties;
}
Кажется, что соединения не освобождаются даже после повторного развертывания приложения. Любые идеи?