환경 : 우분투 개발 세부 14.04.4젠킨스 HikariCP를 해제하지 않는 SpringMVC JPA 웹 애플리케이션 MySQL의 연결의 배포에
응용 프로그램 : 봄 4.2.5.RELEASE MVC 웹 애플리케이션, MySQL은 151 + 1 MAX_CONNECTIONS와 , Hibernate, HikariCP, 풀당 20 개의 연결, 1 개의 풀을 가진 데이터 소스.
자동 배포 도구 : 젠킨스
배포 용기 : 톰캣 7
전제 조건 :
1. 응용 프로그램이 이미 시작하고 웹을 통해 액세스, 작업.
사용의 경우 :
1. 로그인 MySQL의 명령 행 실행에 : 쇼 PROCESSLIST;
2. 명령 줄에서 20 개의 연결 + 1을 관찰합니다.
3. Jenkins에서 새 빌드를 트리거하고 새 * .war을 tomcat에 배포 대기
4. 다음을 실행합니다. show processlist; mysql 커맨드 라인
5. 커맨드 라인에서 40 개의 접속 + 1을 관찰하라.
6. 연결이 MAX_CONNECTIONS + 1까지 증가하는 것을 관찰하면 DB를 필요로하는 유닛 테스트가 실패하기 때문에 Jenkins가 빌드에 실패합니다.
예상 : 응용 프로그램이
(이것은 내 지역 개발 윈도우 8.1 프로 기계 날에 의해 관찰 된 동작입니다) 유휴 모든 경우에서 20 개 응용 프로그램에 액세스 할 경우 최대 연결없이 연결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;
}
연결이 심지어 응용 프로그램을 다시 배포 후, 해제되지 않은 것으로 보인다. 어떤 아이디어?