tomcat异常: Cannot get a connection, pool exhausted

项目运用当中,在tomcat 中的 conf/server.xml

中配制JNDI

配置如下:

 

<Resource auth="Container" name="jdbc/ztc" type="javax.sql.DataSource"/>
					<ResourceParams name="jdbc/ztc">
						<parameter>
							<name>factory</name>
							<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
						</parameter>
						<parameter>
							<name>maxWait</name>
							<value>10000</value>
						</parameter>
						<parameter>
							<name>maxActive</name>
							<value>100</value>
						</parameter>

						<parameter>
							<name>url</name>
							<value>jdbc:sqlserver://192.168.1.99:1433;databaseName=ztc</value>
						</parameter>
						<parameter>
							<name>driverClassName</name>
							<value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value>
						</parameter>

						<parameter>
							<name>maxIdle</name>
							<value>30</value>
						</parameter>
						<parameter>
							<name>username</name>
							<value>ecp</value>
						</parameter>
						<parameter>
							<name>password</name>
							<value>123456</value>
						</parameter>

 

 

但是在运行的时候,因为需要经常性的对数据库进行联接,释放。一会就出现下列异常:

 

org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:103)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
	at com.ytx.ztc.dao.BetbrainOdds45DAOImpl.insertOrUpdateBetbrainOdds45(BetbrainOdds45DAOImpl.java:526)
	at com.ytx.ztc.bean.BetbrainCorrentScoreImpl.getOddsByUrl(BetbrainCorrentScoreImpl.java:256)
	at com.ytx.ztc.bean.BetbrainCorrentScoreImpl.getData(BetbrainCorrentScoreImpl.java:132)
	at com.ytx.ztc.timer.CorrentScoreTimer.run(CorrentScoreTimer.java:28)
	at java.util.TimerThread.mainLoop(Timer.java:432)
	at java.util.TimerThread.run(Timer.java:382)
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:756)

 经过网上搜索,才知道是因为,联接池出现异常。所以添加下面的三个属性配制

 

	<!--  default fasle-->
						<parameter>
								<name>removeAbandoned</name>
								<value>true</value>
						</parameter>
						<!-- set recently request to recall connection -->
						<parameter>
								<name>removeAbandonedTimeout</name>
								<value>60</value>
						</parameter>
						<!--  log infomation log debug .-->
						<parameter>
									<name>logAbandoned</name>
									<value>true</value>
						</parameter>

 

OK。问题已经解决!

 参考联接地址:http://www.cnblogs.com/willpower/archive/2008/07/30/1256582.html

当你遇到 "Cannot get a connection; pool exhausted" 的错误,通常意味着Python的MySQL连接池已经耗尽了所有的可用连接。这可能是因为并发请求过多,超过了数据库连接池的最大容量。以下是几种解决这个问题的方法: 1. **调整数据库连接池大小**:检查你的 `pymysql` 配置,特别是 `mysql_pool_size` 参数,确保它足够处理预期的并发流量。如果可能,增加最大连接数。 ```python from sqlalchemy import create_engine engine = create_engine('mysql+pool://user:password@host/dbname', pool_size=50) ``` 2. **设置合理的超时时间**:配置连接自动回收机制,例如设置 `pool_recycle` 参数来限制无活动连接的存活时间。 ```python engine = create_engine('mysql+pool://user:password@host/dbname', pool_recycle=600) # 10分钟内无操作则关闭连接 ``` 3. **按需获取连接**:避免长时间保持大量未使用的连接。每次需要数据库操作时,尽可能快地获取并释放连接。 4. **监控和限流**:通过日志分析或第三方工具监控连接池的状态,并在必要时限制并发请求的数量。 5. **处理异常并回滚**:捕获 `PoolError` 或 `OperationalError(2003)` 等错误,并在适当的情况下释放已有的连接,然后尝试再次获取。 ```python try: with engine.connect() as conn: # ...数据库操作... except (PoolError, OperationalError): # 处理错误并释放连接,再试一次 engine.dispose() with engine.connect() as conn: # ...数据库操作... ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值