public class DBConnectionManager {
private final static DBConnectionManager instance=new DBConnectionManager();
private DBConnectionPool pool;
public static DBConnectionManager getInstance() {
return instance;
}
public Connection getConnection() throws SQLException{
return pool.getConnection();
}
public void freeConnection(Connection con) throws SQLException{
pool.freeConnection(con);
}
private DBConnectionManager() {
init();
}
private void init() {
Configuration cfg=Configuration.getInstance();
String db_driver=cfg.getValue("DB.DRIVER");
String db_url=cfg.getValue("DB.URL");
String db_user=cfg.getValue("DB.USER");
String db_password=cfg.getValue("DB.PASSWORD");
int db_maxConn=Integer.parseInt(cfg.getValue("DB.MAX_CONNECTIONS"));
try {
Class.forName(db_driver);
}
catch (ClassNotFoundException ex) {
System.out.println(ex);
}
pool = new DBConnectionPool(db_url,db_user,db_password,db_maxConn);
}
class DBConnectionPool {
private Vector freeConnections = new Vector();
private int maxConn;
private int connNumb;
private String URL;
private String password;
private String user;
public DBConnectionPool(String URL, String user, String password,int maxConn) {
this.URL = URL;
this.user = user;
this.password = password;
this.maxConn = maxConn;
}
public synchronized void freeConnection(Connection con) {
freeConnections.addElement(con);
connNumb--;
notifyAll();
}
public synchronized Connection getConnection() throws SQLException{
Connection con = null;
if (freeConnections.size() > 0) {
con = (Connection) freeConnections.firstElement();
freeConnections.removeElementAt(0);
try {
if (con.isClosed()) {
con = getConnection();
}
}
catch (SQLException e) {
con = getConnection();
}
}
else if (maxConn == 0 || connNumb < maxConn) {
con = newConnection();
}
if (con != null) {
connNumb++;
}
return con;
}
private Connection newConnection() throws SQLException{
Connection con =DriverManager.getConnection(URL,user, password);
return con;
}
}
public class Configuration {
private Properties properties;
private final static Configuration cfg = new Configuration();
private Configuration() {
properties = new Properties();
InputStream is = null;
try {
is = getClass().getResourceAsStream("/app.properties");
properties.load(is);
} catch (Exception exception) {
System.out.println("Can't read the properties file. ");
} finally {
try {
if (is != null)
is.close();
} catch (IOException exception) {
// ignored
}
}
}
public static Configuration getInstance() {
return cfg;
}
public String getValue(String key) {
return properties.getProperty(key);
}
}
分享到:
相关推荐
对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...
C# 数据库连接池 C# 数据库连接池 C# 数据库连接池 C# 数据库连接池
* 数据库连接池特点: * 获取连接时不需要了解连接的名字,连接池内部维护连接的名字 * 支持多线程,保证获取到的连接一定是没有被其他线程正在使用 * 按需创建连接,可以创建多个连接,可以控制连接的数量 * 连接...
context.xml, 数据库连接池配置文
数据库连接池的例子.doc数据库连接池的例子.doc数据库连接池的例子.doc
达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,
C#高效数据库连接池源码
Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置...
提供了数据库连接池的驱动,分别有c3p0、druid、dbcp三种数据库连接池的驱动
Druid为监控而生的数据库连接池,它是阿里巴巴开源平台上的一个项目。Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能.它可以替换DBCP和C3P0连接池。Druid提供了一个高效、功能强大、可...
这个文档详细讲述了mysql数据库连接池的配置以及数据库连接池的工作原理。
数据库连接池 数据库连接池 数据库连接池 数据库连接池
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接, 当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。 我们可以通过设定连接池最大连接数...
收集了常见的数据库连接jar包,包括oracle、mysql、sql server、db2、opta、dbcp连接池、c3p0连接池等等常见的数据库jar包,不断更新中。
c#语言下,使用netcore2.1框架,调用netstandard数据库连接池组件
比较实用的几种数据库连接池详细配置,值得收藏
数据库连接池的基础学习,针对mysql数据库的数据库连接池在java中的具体实现及应用配置
JAVA 使用数据库连接池连接Oracle数据库,全代码,附加详细说明
数据库连接池-jar包 数据库连接池-jar包 数据库连接池-jar包 数据库连接池-jar包 数据库连接池-jar包 数据库连接池-jar包 数据库连接池-jar包 数据库连接池-jar包
数据库连接池,连接数过多