我正在Eclipse Juno中开发Java EE Web应用程序.我已将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>
Run Code Online (Sandbox Code Playgroud)
我的应用程序使用Eclipse部署到Tomcat,在Tomcat的context.xml中,属性reloadable设置为"true",以便在检测到更改时自动重新加载Web应用程序:
<Context reloadable="true">
我注意到,每次上面提到的自动重新加载时,都会保留10个与PostgreSQL db的连接(因为在webapp的context.xml中,initialSize ="10").因此,在10次更改后抛出PSQLException:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
...
Run Code Online (Sandbox Code Playgroud)
如果我手动重启Tomcat - 一切都很好,只保留10个连接.
有没有人知道解决这个问题的方法,所以有可能将reloadable设置为"true"并且不会在每次重新加载上下文时导致更多连接汇集?
非常感谢任何帮助.
PS Apache Tomcat版本7.0.32