环境:eclipse + tomcat
问题:数据库连接使用的是数据库连接池,部分配置参数:
maxActive="100" maxIdle="30" maxWait="-1"
有一个查询操作复杂一点,需要关联5张表,使用了out join,inner join等等,当点击查询按钮的频率比较大时(如:100次/秒,200次/秒),就会连不上数据库.
这样的问题应该很常见的,那位朋友可以解决,帮帮忙~~ 多谢了
tomcat 数据库连接池 查询过于频繁时导致 数据库连接失败!
答案:4 悬赏:50 手机版
解决时间 2021-03-20 08:44
- 提问者网友:却不属于对方
- 2021-03-19 22:04
最佳答案
- 五星知识达人网友:逃夭
- 2021-03-19 22:29
在tomcat\conf\context.xml写上
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>
然后项目web.xml
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
把数据库jar包放在tomcat\lib下
写数据库实现类
public Connection getConn()
{
try
{
Context ic = new InitialContext();
DataSource source = (DataSource)ic.lookup("java:comp/env/jdbc/restrant");
Connection conn = source.getConnection();
return conn;
}
catch(NamingException nex)
{
nex.printStackTrace();
return null;
}
catch(Exception ex)
{
ex.printStackTrace();
return null;
}
}
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>
然后项目web.xml
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
把数据库jar包放在tomcat\lib下
写数据库实现类
public Connection getConn()
{
try
{
Context ic = new InitialContext();
DataSource source = (DataSource)ic.lookup("java:comp/env/jdbc/restrant");
Connection conn = source.getConnection();
return conn;
}
catch(NamingException nex)
{
nex.printStackTrace();
return null;
}
catch(Exception ex)
{
ex.printStackTrace();
return null;
}
}
全部回答
- 1楼网友:荒野風
- 2021-03-19 23:48
数据库连接池的连接被用光了,自然就不能连接了
可以加大最大连接数,还就没了连接用完了要及时关闭,以免占着坑不拉屎,
想那些sql语句复杂的最好简化以减少查询的时间,寻找别的解决方法
- 2楼网友:摆渡翁
- 2021-03-19 23:24
name:连接池的名字
auth:连接生成的范围
type:连接类型
maxactive,连接池的最大数据库连接数。设为0表示无限制。
maxidle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
接将被标记为不可用,然后被释放。设为0表示无限制。
maxwait ,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示
无限制。
username:连接的用户名
password:连接使用的密码
driverclassname:数据库连接驱动
url:连接使用的url
databasename:数据库sid标示
- 3楼网友:野慌
- 2021-03-19 23:02
当数据量比较大时,Join的效率比较慢. 可以考虑用视图.
数据库最大连接数为100, 当点击数大时,就超过了maxActive 数了.
将maxActive 设大如300(逐渐设大), 并将 maxIdle 设小(如5 或10)接 )
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯