[英]Tomcat Connection Pool configuration: DataSource type and “Too many connection” error
我通过JNDI资源使用tomcat连接池。
在context.xml
:
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
maxActive="1000" maxIdle="100" maxWait="10000"
url="jdbc:mysql://localhost:3306/mydatabase"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" />
在web.xml
:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
从我需要数据库连接的java类中,我执行以下查找:
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/mydb");
我的第一个疑问是DataSource类型。 使用javax.sql.DataSource
或org.apache.tomcat.jdbc.pool.DataSource
是否相同?
而且,有时我会收到“Too many connections”错误。 我已经阅读了很多有关此问题的stackoverflow问题/答案,但我没有成功地理解问题所在。
我已经关注了tomcat文档,并且我正确地关闭了结果集,语句和连接。
编辑
我的tomcat版本是7.0.26。 所以应该有一个bug(参见informatik01用户建议的链接)
如果将JDBC资源放在$ CATALINA_HOME / conf / context.xml中,则会为已部署的每个Web应用加载资源。 (这可能意味着大量的连接)如果将该资源移动到webapp的META-INF / context.xml,它将仅在部署该特定Web应用程序时加载。 http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html
也可能是你有太多的maxActive和maxIdle。
javax.sql.DataSource
是一个接口, org.apache.tomcat.jdbc.pool.DataSource
是一个类。 我不确定tomcat是否允许我们直接实例化org.apache.tomcat.jdbc.pool.DataSource
。 如果是,您可以使用其中任何一种。
连接相关的错误可能是由于
tomcat配置文件中的maxActive="1000" maxIdle="100" maxWait="10000"
。
将其设置为maxActive="10" maxIdle="10" maxWait="10"
- 10个活动连接数,10个空闲连接数,最长10秒等待时间。
您可能需要增加mysql的最大连接数,默认最大值为151。
确保没有资源泄漏:示例java.sql.Connection未关闭
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.