多线程访问数据库问题

NULL 2012-07-25 03:55:48
数据库使用的是MYSQL的DBCP连接池。。
以下我的数据库连接池类:
package com.smu.DB;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;

import java.util.Properties;
import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

/**
* 数据库连接池类
* */
public final class DbConnection {
public static DataSource DS;

/**
* 获取数据库连接
* */
static {
initDS();
}
public static synchronized Connection getCon(){
Connection con = null;
try {
if(DS == null){
initDS();
con = DS.getConnection();
}
else{
con = DS.getConnection();
}

} catch (SQLException e) {
System.out.print("取得连接出现异常");
e.printStackTrace();
}
return con;
}

/**
* 读取资源文件,设置连接池参数
* */
public static void initDS() {
Properties p = new Properties();
InputStream is = null;
try {
is = DbConnection.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
p.load(is);
is.close();
DS = BasicDataSourceFactory.createDataSource(p);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch (Exception e) {

e.printStackTrace();
}
}
}

使用多个线程在调用getCon()的时候会出现
取得连接出现异常org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Data source rejected establishment of connection, message from server: "Too many connections")

是怎么回事呢?本人初学者。。
...全文
125 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
NULL 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

初始化了多少连接?
[/Quote]

连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/smuoj
username=root
password=671354

#<!-- 初始化连接 -->
initialSize=100

#最大连接数量
maxActive=300

#<!-- 最大空闲连接 -->
maxIdle=50

#<!-- 最小空闲连接 -->
minIdle=20

#<!-- 超时等待时间以毫秒为单位 1000毫秒/1000等于10秒 -->
maxWait=5000

#指定由连接池所创建的连接的自动提交auto-commit状态
defaultAutoCommit=true

#如果设为true则tomcat自动检查恢复重新利用没有关闭的connection
removeAbandoned=true

#设定连接在多少秒内被认为是放弃的连接
removeAbandonedTimeout=60

#输出详细日志,可以用来发现那里泄漏
logAbandoned=true

NULL 2012-07-25
  • 打赏
  • 举报
回复
连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/smuoj
username=root
password=671354

#<!-- 初始化连接 -->
initialSize=100

#最大连接数量
maxActive=300

#<!-- 最大空闲连接 -->
maxIdle=50

#<!-- 最小空闲连接 -->
minIdle=20

#<!-- 超时等待时间以毫秒为单位 1000毫秒/1000等于10秒 -->
maxWait=5000

#指定由连接池所创建的连接的自动提交auto-commit状态
defaultAutoCommit=true

#如果设为true则tomcat自动检查恢复重新利用没有关闭的connection
removeAbandoned=true

#设定连接在多少秒内被认为是放弃的连接
removeAbandonedTimeout=60

#输出详细日志,可以用来发现那里泄漏
logAbandoned=true

龙四 2012-07-25
  • 打赏
  • 举报
回复
初始化了多少连接?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧