我正在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>
我的应用程序使用Eclipse部署到Tomcat,在Tomcat的context.xml中,一个属性reloadable被设置为“true”,以便在检测到更改时自动重新加载web应用程序:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
...
会很感激你的帮助。
附言。Apache Tomcat 7.0.32版
为了解决这个问题,在context.xml文件的资源元素中添加一个值为“close”的属性closemethod
(这里有文档说明)。
下面是我的/meta-inf/context.xml文件的正确内容:
<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"
closeMethod="close" />
</Context>
注意属性closeMethod。我对它进行了测试,现在连接的数量严格按照context.xml文件中的定义保存!
当使用Konstantin Kolinko提供的解决方案(使用closemethod=“close”)时,一切都很好,保留的连接数量严格按照context.xml文件中定义的方式保留。因此,使用closemethod=“close”似乎是避免上下文重新加载后连接耗尽的唯一正确方法(目前)。
===更新3(2014-01-13),又名“Tomcat发布管理器的返回”===
更新2中描述的行为背后的奥秘被解开了。在我收到Mark Thomas(Tomcat发布经理)的回复后,更多的细节已经被清除。我希望这是最后一次更新。因此,正如更新1中提到的那样,这个bug确实被修复了。我把马克回复中的重要部分作为引文贴在这里(强调是我的):
我正在EclipseJuno中开发一个JavaEEWeb应用程序。我已经将Tomcat配置为使用JDBC连接池(org.apache.Tomcat.JDBC.pool)和PostgreSQL数据库。以下是我的项目META-INF/context中的配置。xml: 我的应用程序使用Eclipse部署到Tomcat,在Tomcat的context.xml属性reloadable设置为"true",以便
问题内容: 我正在Eclipse Juno中开发JavaEEWeb应用程序。我已将Tomcat配置为与PostgreSQL数据库一起使用JDBC连接池(org.apache.tomcat.jdbc.pool)。这是我的项目的META-INF / context.xml中的配置: 我的应用程序是使用Eclipse部署到Tomcat的,并且在Tomcat的context.xml中,可重载属性设置为“
我们刚刚从dbcp迁移到tomcat jdbc连池。我们在加载中尝试了系统,收到了以下异常: 请注意: 不忙的连接在哪里?忙的数字在这之后一直在下降,但我们仍然没有得到任何连接。 有什么想法吗? 配置: env:ubuntu和tomcat 6. db-mysql
我们有一个spring-boot应用程序,它使用嵌入式tomcat进行部署,并使用MySQL后端的默认tomcat-jdbc连接池,而没有为MySQL或tomcat端定制。 该应用程序有一些调度程序,它们主要在一天中的特定时间运行,即在昨天的最后一次cron运行和今天的第一次cron运行之间,有超过9个小时的间隙。然而,无论何时cron在早期运行,它都从未遇到过空闲连接问题。 现在我们看到一条错误
Tomcat在使用后不释放连接的原因可能是什么? 这是我的配置