Пытается отладить приложение, имеющее аналогичную проблему, как Missing connections in tomcat jdbc connection pool. Я в настоящее время использую:Пул подключения Tomcat/Spring - список соединений.
- Tomcat 6.0.32 - Требование о компании
- Tomcat JDBC Pool 1.0.9.3
- Java 1.6.x - Требование Компании
- Spring 3.2.14
- myBatis 3.2.8
- Кварц 2.2.2
Существует смесь Spring Web запросов как дост l, поскольку Quartz запускал задания с использованием пула. Что происходит после примерно 5 запусков, у меня больше нет доступных подключений в пуле, initialSize = 5, maxActive = 10. Увеличение maxActive ничего не делает, это просто занимает больше времени, и больше Quartz работает до пула пуст.
2016-05-19 08:59:46,027 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread QuartzSchedulerThread.run 276 : batch acquisition of 1 triggers
2016-05-19 09:00:00,001 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread QuartzSchedulerThread.run 276 : batch acquisition of 0 triggers
2016-05-19 09:00:00,003 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-6 JobRunShell.run 201 : Calling execute on job DEFAULT.refMigrDetail
2016-05-19 09:00:00,003 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-6 DataSourceUtils.doGetConnection 110 : Fetching JDBC Connection from DataSource
2016-05-19 09:00:24,409 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread QuartzSchedulerThread.run 276 : batch acquisition of 0 triggers
2016-05-19 09:00:30,004 ERROR org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-6 CMRoreReferenceMigrator.run 93 : org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-6] Timeout: Pool empty. Unable to fetch a connection in 30 seconds, none available[10 in use].
2016-05-19 09:00:49,378 DEBUG org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread QuartzSchedulerThread.run 276 : batch acquisition of 0 triggers
Что я сделал до сих пор:
- Switched от Apache Commons ГСБД в Tomcat JDBC пула. Это работает.
- Включено DEBUG для Tomcat JDBC Pool. Также работает
- Включено JMX на Tomcat для мониторинга пула соединений с jvisualvm - это НЕ работало, поскольку Spring фактически создает пул, а не Tomcat.
С включенным DEBUG для пула Tomcat JDBC журнал регистрации не показывает, где/почему соединения НЕ выпускаются. Для маршрута JMX, поскольку я НЕ использую Spring-Boot, я не могу включить JMX в Spring, чтобы увидеть пул соединений.
Мой вопрос в том, есть ли способ захватить объект/экземпляр пула Spring Connection Connection из SPRING (а не Tomcat), а затем перебрать его для всех соединений и перечислить некоторые простые свойства для каждого соединения, такие как активные, использование, закрытие и т. д.
Моя мысль, что я просто пишу код Java, который выгружает список пулов соединений в журнал до и после задания Quartz. Сбрасывает список в ключевых транзакциях Spring Web, которые я использую в веб-приложении до и после.
Моя конфигурация пула Пружинное соединение, базы данных DB2:
<bean id="rrfecfDataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
<property name="driverClassName" value="${rrfecf.datasource.jdbcDriver}" />
<property name="url" value="${rrfecf.dataousrce.databaseUrl}" />
<property name="username" value="${rrfecf.datasource.username}" />
<property name="password" value="${password:rrfecf.datasource}" />
<property name="initialSize" value="5" />
<property name="maxActive" value="10" />
<property name="defaultAutoCommit" value="false" />
<property name="maxIdle" value="5" />
<property name="minIdle" value="0" />
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" />
<property name="validationQuery" value="SELECT CURRENT_DATE FROM sysibm.sysdummy1" />
<property name="timeBetweenEvictionRunsMillis" value="600000" /> <!-- 10 minutes -->
<property name="minEvictableIdleTimeMillis" value="900000" /> <!-- 15 minutes -->
</bean>
myBatis конфигурации Spring:
<bean id="rrfecfSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="WEB-INF/sqlMapConfig.xml"/>
<property name="dataSource" ref="rrfecfDataSource" />
</bean>