Я разрабатываю веб-приложение Java EE в Eclipse Juno. Я настроил Tomcat для использования пула соединений JDBC (org.apache.tomcat.jdbc.pool) и базы данных PostgreSQL. Вот конфигурации в моем проекте META-INF/context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- Configuration for the Tomcat JDBC Connection Pool -->
<Resource name="jdbc/someDB"
type="javax.sql.DataSource"
auth="Container"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/somedb"
username="postgres"
password="12345"
maxActive="100"
minIdle="10"
initialSize="10"
validationQuery="SELECT 1"
validationInterval="30000"
removeAbandoned="true"
removeAbandonedTimeout="60"
abandonWhenPercentageFull="50" />
</Context>
Мое приложение развернуто в Tomcat с использованием Eclipse, а в Tomcat context.xml атрибут reloadable установлен на "true", чтобы автоматически перезагрузить веб-приложение, если обнаружено изменение:
<Context reloadable="true">
Я заметил, что каждый раз, когда вышеупомянутая автоматическая перезагрузка происходит, еще 10 соединений с PostgreSQL db зарезервированы (потому что в webapp context.xml initialSize = "10" ). Итак, после 10 изменений вызывается PSQLException:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
...
Если я вручную перезагружаю Tomcat - все в порядке и зарезервировано только 10 подключений.
Знает ли кто-нибудь об этой проблеме, так что можно было бы разработать с перезагружаемым набором "true" и не приводить к объединению большего количества подключений при каждом перезагрузке контекста?
Поблагодарили бы за любую помощь.
P.S. Apache Tomcat Version 7.0.32