数据库连接池java实现小结
来源:互联网 发布:买旧书的网站 知乎 编辑:程序博客网 时间:2024/05/16 17:02
因为工作需要要使用到连接池,所以拜读了互联网上众多前辈的文章,学了不少经验,这里想做一个小结,加上自己的想法和在一起,希望能给大家一些帮助。
目的:
- 消除数据库频繁连接带来的开销和瓶颈。
解决方案:
- 不过多的限制用户的使用,既不能太多的要求用户按规定的方法得到和使用数据库连
- 尽量保持用户的习惯
目前的很多方法都是要求用户只能按规定方法使用连接,不能使用直接关闭数据连接的方法。解决办法就是使用代理类,来中间解决。可以参考http://www-900.ibm.com/developerWorks/cn/java/l-connpoolproxy/index.shtml
- 能维护连接的正常状态
因为针对数据库连接创建的资源,如果不能及时的释放,就会影响下一次数据连接的使用。例如在sql 2k中,一个连接不同创建多条Statement否则操作时会有数据连接占线的异常,所以必须在归还连接以后释放这些资源。
|
|
- 正确保护类不被违例使用
一个考虑就是不能让用户随便使用代理类,而只能自己使用,一个就是用内部私有类,一个就是使用只有指定类才能调用的标志。我的实现就是采用后者。
|
- 提供良好的用户接口,简单实用
使用静态方法创建工厂,然后来得到连接,使用完全和普通的Connection方法一样,没有限制。同时为了方便,设置了连接参数类和工厂参数类。
ConnectionParam param = new ConnectionParam(driver,url,user,password);
ConnectionFactory cf = null;//new ConnectionFactory(param, new FactoryParam());
try{
cf = new ConnectionFactory(param,new FactoryParam());
Connection conn1 = cf.getFreeConnection();
Connection conn2 = cf.getFreeConnection();
Connection conn3 = cf.getFreeConnection();
Statement stmt = conn1.createStatement();
ResultSet rs = stmt.executeQuery("select * from requests");
if (rs.next())
{
System.out.println("conn1 y");
}
else
{
System.out.println("conn1 n");
}
stmt.close();
conn1.close();- 为了实现连接池的正常运作,使用了单态模
|
- 连接池的管理
对于连接池的管理,我是设想使用静态管理和动态管理两种策略,设置了最大限制,和恒定的连接数。使用了2个池,一个空闲池,一个使用池。静态就是使用的时候发现空闲连接不够再去检查。动态就是使用了一个线程定时检查。
|
最后给出完整的源代码:
_Connectio.java
package scut.ailab.connectionpool; import java.lang.reflect.*; /** /**
/** /** |
ConnectionFactory.java
package scut.ailab.connectionpool; /** public class ConnectionFactory { private ConnectionFactory() { |
ConnectionParam.java
package scut.ailab.connectionpool; import java.io.Serializable; /** public String getDriver() { public String getPassword() { public String getUrl() { public String getUser() { public void setDriver(String driver) { public void setPassword(String password) { public void setUrl(String url) { public void setUser(String user) { /** /** |
FactoryMangeThread.java
/* /** |
FactoryParam.java
/* /** |
testmypool.java
/* /** public class testmypool { public void test1() |
- :: 数据库连接池java实现小结 ::
- 数据库连接池java实现小结
- 数据库连接池java实现小结
- 数据库连接池java实现小结
- 数据库连接池Java实现小结
- 数据库连接池java实现小结
- 数据库连接池Java实现小结
- 数据库连接池java实现小结
- 数据库连接池java实现小结
- 数据库连接池java实现小结
- 数据库连接池java实现小结
- 数据库连接池java实现小结
- 数据库连接池java实现小结
- 数据库连接池Java实现小结
- java实现数据库连接池
- Java数据库连接池实现
- JAVA数据库连接池实现
- Java 数据库连接池 实现
- netfilter:Linux 防火墙在内核中的实现
- Linus为什么不用C++写Linux内核?
- 运用Blog提高你的商业写作能力 --转贴
- C 语言编程
- Linux系统调用跟我学(3)――僵尸进程
- 数据库连接池java实现小结
- Linux系统调用跟我学(2)――进程管理
- Linux系统调用跟我学(1)
- SQL Server 存储过程的分页
- 内存管理内幕
- 学会在ASP中使用存储过程
- 用存储过程实现ASP对数据库访问
- 用 hashcash 打击垃圾邮件
- 认识ASP.NET配置文件Web.config