我正在Eclipse Juno中開發Java EE Web應用程序。我配置了Tomcat以使用JDBC連接池(org.apache.tomcat.jdbc.pool)和PostgreSQL數據庫。 下面是我的項目的META-INF/context.xml的配置: 當Tomcat中啓用了Context reload =「true」時,JDBC連接池的連接用完了
<?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>
我的應用程序使用Eclipse部署到Tomcat和Tomcat的context.xml中的屬性重新加載設置爲「真」自動如果檢測到變化重新加載web應用程序:
<Context reloadable="true">
我注意到,每次上述的自動重新加載是發生到PostgreSQL分貝10個更多的連接被保留(因爲在web應用程序的context.xml中INITIALSIZE =」 10" )。所以,10後改變PSQLException拋出:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
...
如果我手動重新啓動Tomcat - 一切都很好,只是10個連接被保留。
是否有人知道解決此問題的方法,因此可以使用可重載設置開發「true」,並且不會在每次上下文重新加載時導致建立更多連接?
希望有任何幫助。
P.S.的Apache Tomcat版本7.0.32
最有可能是http://stackoverflow.com/questions/8435359/why-do-connections-persist-when-i-undeploy-a-webapp-using-the-tomcat-7-jdbc-conn的副本 – Isaac
@Isaac「它已從Tomcat 7.0.11更正」,但是我有7.0.32,結果仍然相同。所以基本上這是一個錯誤? – informatik01
可能是迴歸。如果您確信自己正在釋放所有連接,並且問題仍然存在,那麼我會要求重新打開該錯誤報告。 – Isaac