如何在上下文文件中设置连接池?

Posted

技术标签:

【中文标题】如何在上下文文件中设置连接池?【英文标题】:how to set connection pool in context file? 【发布时间】:2012-11-10 15:12:08 【问题描述】:

我已经使用简单的 servlet 开发网页。在这里,我使用一个上下文文件来声明这样的数据库连接。

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/red" auth="Container" type="javax.sql.DataSource"
      maxActive="50" timeBetweenEvictionRunsMillis="3600000"
      minEvictableIdleTimeMillis="3600000"
      maxIdle="30" maxWait="10000" username="root"
      password="root" driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost:3306/red"
      defaultAutoCommit="false" >

</Resource>
</Context>

我已经在 web.xml 中配置了

  <resource-ref>
    <description>Mysql datasource</description>
    <res-ref-name>jdbc/red</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
 </resource-ref>

在 servlet 页面中

    Context ctx=new InitialContext();
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/red");
    con=ds.getConnection();
    state=con.createStatement();
    rs=state.executeQuery(s);
    rs.close();
    con.close();
    ctx.close();

我的问题是当连接建立超过 50 次时出现这样的错误:

   SEVERE: Servlet.service() for servlet jsp threw exception

java.util.NoSuchElementException: 等待空闲对象超时 在 org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1171) 在 org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) 在 org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)

上下文 ctx=new InitialContext(); 120: 数据源 ds=(数据源)ctx.lookup("java:comp/env/jdbc/red"); 121: con=ds.getConnection();

【问题讨论】:

【参考方案1】:

尝试执行 SET GLOBAL max_connections = 500; 在 MySQL 中或重新启动 MySQL。 此链接将帮助您解决问题 here

【讨论】:

以上是关于如何在上下文文件中设置连接池?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Tomcat 中设置上下文路径,以便在不附加部署文件夹名称的情况下进入站点?

如何在 Tomcat 7.0 中设置 Web 应用程序的上下文路径

您将如何在 django 中设置“上下文”类型的对象

如何在android的片段中设置应用程序上下文?

如何在 Spring Boot Tests 中设置 servlet 上下文路径?

如何通过浏览器的语言在 Sitecore 中设置上下文语言?