社区
非技术区
帖子详情
如何实现共享连接池?
sdxiaoj
2002-02-27 02:11:23
在一个小型应用中,往往多个SERVLET或JAVA BEAN与同一个数据库通信,在这种情况下,不可能每个SERVLET或JAVA BEAN 都有自己的连接池,这就需要共享连接池,通过一些资料了解到可以通过两种方法实现共享连接池:使用SERLET上下文或单个类,但是对此不是很理解,不知哪位高人是否能够详细解释一下,或提供一些资料、代码。
非常感谢!
...全文
93
2
打赏
收藏
如何实现共享连接池?
在一个小型应用中,往往多个SERVLET或JAVA BEAN与同一个数据库通信,在这种情况下,不可能每个SERVLET或JAVA BEAN 都有自己的连接池,这就需要共享连接池,通过一些资料了解到可以通过两种方法实现共享连接池:使用SERLET上下文或单个类,但是对此不是很理解,不知哪位高人是否能够详细解释一下,或提供一些资料、代码。 非常感谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sdxiaoj
2002-02-28
打赏
举报
回复
谢谢答复!
还是有一些问题不解。从有关资料中介绍了一种使用单个类(singleton class)来封装所需的特性(加假设已经建立了一个connectionPool类)。单个类仅仅是一种只能有单个实例被创建、通过使用私有构造建立起来的强加类。实例通过静态方法检索,检查对象是否已得到分配,如果是这样就返回,如果不是就分配并返回一个新的对象。资料提供了单个类大纲,比如为:BookPool,这样每个使用它的SERVLET都只需要通过调用BookPool.getInstance()就可以获得连接池。大纲如下:
public class BookPool extends ConnectionPool() {
private BookPool pool=null;
private BoolPool( ... ) {
super(...); // Call parent constructor
...
}
public static synchronized BookPool getInstance() {
if(pool == null) {
pool = new BookP00l(...);
}
return(pool);
}
}
问题是:此单个类在何时,何地建立?
weilinwu
2002-02-27
打赏
举报
回复
public class ConnectionPool {
private static Stack pool = null;
public ConnectionPool() {
Class.forName(dbDriver);
Connection conn = null;
for (int i=0; i<initCapacity; i++){
if (user == null || password == null)
conn = DriverManager.getConnection(dbUrl);
else
conn = DriverManager.getConnection(dbUrl, user, password);
pool.push(conn);
} // end for
}
public Connection getConnection() {
Connection conn = null;
synchronized(pool){
if (pool.empty()){
try{ pool.wait(connWaitTime);} //Wait for the connection
catch(InterruptedException e){
System.out.println(e);
Log.log(e);
}
} //end if(pool.empty())
if (pool.empty()){
throw Exception();
}
else
conn = (Connection)pool.pop();
} //end synchronized(pool)
return conn;
}
public void returnConnection(Connection conn) {
if (conn != null){
synchronized(pool){
if (pool != null && pool.size() < maxCapacity && !isExist(conn)){
pool.push(conn);
pool.notify();
}
}
}
}
public void emptyPool(){
Connection conn = null;
synchronized(pool){
while(pool != null && !pool.empty()){
conn = (Connection)pool.pop();
try{
conn.close();
conn = null;
}
catch(SQLException e){
}
}
} //end synchronized(pool)
}
}
由于工作原因,我不能写得太清楚,请自己稍加修改后再使用,我只是提供给你一个思路……
HttpClient4.2.1版本的Jar包
HttpClient4.2.1版本,内有所需的该版本jar包
华为技术专家教你如何
实现
一个Java
连接池
?
获得连接归还连接最小空闲连接数最大连接数内部
实现
功能:连接建立连接心跳保持连接管理空闲连接回收连接可用性检测JedisPool继承JedisPoolAbstract又继承抽象类Pool,Pool内部持有Apache Common的GenericObjectPool:所以JedisPool
连接池
就是直接复用GenericObjectPool,并没有自己
实现
一套池。综上,Jedis API属于
连接池
和连接分离,JedisPool是线程安全的
连接池
,Jedis是非线程安全的单一连接。
python 多进程
共享
数据库
连接池
_python 单例模式
实现
多线程
共享
连接池
我们经常使用数据库
连接池
,但那是有时候有些库并没有
实现
线程安全的
连接池
,这个时候,该如何自己封装?多进程和多线程甚至协程模式下,如何控制数据库连接数量或者是socket连接数。这个问题很有意义。首先,多进程,通常的做法是每个进程实例化一个
连接池
,为什么不
共享
一个池,因为多进程和多线程同步的开销不一样,一般三方库都不会支持,但是redis 的库可以,他有些细节不一样。然后多线程
共享
,只需要将连接放到...
php - 数据库
连接池
实现
什么是数据库
连接池
? 数据库
连接池
负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。 数据库
连接池
有什么好处? 数据库
连接池
技术带来的优势: 1. 资源重用 由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开.........
HikariCP
连接池
分析内部分享
HikariCP
连接池
分享 希望可以带着大家了解HikariCP
连接池
,并对线上问题给出解决思路和方案。然后可以自己去看一下HikariCP,个人感觉HikariCP
实现
的比较精巧,代码很值得一读,我这里会给出整体的设计和一些主流程,可以减少大家深入HikariCP的时间。 为什么分享HikariCP
连接池
? 线上问题:获取
连接池
失败? 结果:整个服务在一段时间不可用 引出了这些问题,是我想到的一些问题,也是我的解决问题的思路 1、什么是
连接池
? 2、为什么用
连接池
? 3、为什么用HikariCP
连接池
?
非技术区
23,407
社区成员
70,513
社区内容
发帖
与我相关
我的任务
非技术区
Java 非技术区
复制链接
扫一扫
分享
社区描述
Java 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章