Resource Pool(资源池)模式已经在上一篇Post中露过脸了,这次让我们再对其看个仔细吧。Resource Pool模式是在应用程序开发中十分常见的一种模式,如果你使用过任何一个主流的应用服务器,如Tomcat,Weblogic,Websphere,Resin等等,对连接池(Connection Pool)的配置一定都不会陌生。我们从几乎无处不在的连接池就可以知道Resource Pool模式的普遍性了。对于Connection这样资源,初始化的开销是很大的,因为建立连接必须进行Socket连接,验证以及授权等繁杂的操作,代价是昂贵的,因此及早初始化一定量打开的连接,并且缓存起来是一个相当不错的策略。以下是Resource Pool的静态结构图:
使用Resource Pool模式应该注意以下几点:
1.尽管你可以使用on demand(窃用了IBM的Buzz word,真不好意思,嘻嘻)的方式来初始化资源,但你还是应该在demand还没有到来之前为资源的使用者作好准备;
2.在资源吃紧的时候就开始往资源池中增加新的资源,而不是等到口渴了才开始挖井。同时,资源的增加并非简单的一一对应——发现一个资源请求无法响应就创建一个新的资源,应该遵循一定的策略。想想ArrayList,Vector中Capacity增加的策略,你或许会得到新的启示;
3.既然资源放在一个池中,池的大小就不能够无限地扩大,应该为资源池设定一个上限。当资源池达到上限的时候,就需要阻塞甚至阻止新的资源请求直至有正在使用的资源释放至资源池中。
4.设置资源的timeout。资源是宝贵的,而且是共享的。当应用程序占着茅坑不拉屎的时候,就应该将资源进行回收。这个时候,资源定时器就会派上用场了。
事实上,我们一般都不会自己去实现资源池,因为已经有很多成熟的产品可供选择了,如DBCP。但是正如侯捷先生说过的,当你了解飞机的结构之后即使不会去制造飞机,但是至少去看航展的时候会觉得更过瘾。
[1] 参考书籍:《数据访问模式——面向对象应用中的数据库交互》
分享到:
相关推荐
ERP——Enterprise Resource Planning 企业资源计划系统,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。ERP系统集中信息技术与先进的管理思想於一身,成为现代...
本文将深入探讨如何通过注解(Annotation)和`@Resource`来实现自动装配,以及其背后的源码实现。 ### 一、注解驱动的自动装配 在Spring 2.5引入了注解支持后,开发者可以使用注解来声明Bean的属性、方法或构造...
Angular 进阶之 —— ngx-resource
访问者模式的核心思想是将数据结构与对数据的操作分离。在上述例子中,资源文件包括PDF、PPT和Word文件,我们需要一个工具来处理这些文件,例如提取文本内容到txt文件。最初,我们可以创建一个抽象基类`ResourceFile...
### RDF数据存储模式研究及实现 #### 摘要与背景 随着互联网的快速发展,Web上的信息量呈现出指数级的增长趋势。为了更好地管理和利用这些信息,语义网(Semantic Web)的概念应运而生,旨在提供一个更加智能、...
元数据,简单理解为关于数据的数据,是一种描述信息资源或数据特征的结构化信息。在不同领域,元数据有着不同的定义和应用。例如,在数据仓库领域,元数据用来描述数据及其环境,既服务于用户理解数据,也支持系统对...
### P2P.Resource.Pool...通过以上分析可以看出,“P2P.Resource.Pool”不仅仅是关于技术架构的设计,更重要的是它提供了一种新的视角来看待资源管理和优化问题,这对于推动P2P技术在实际应用中的发展具有重要意义。
本文将深入探讨如何在Spring Boot中访问并读取`Resource`目录下的文件,特别是PDF文件。 1. **静态资源的默认配置** Spring Boot默认提供了对静态资源(如CSS、JavaScript、图片等)的处理。它会自动配置`...
首先,Spinner的基本用法是通过在布局文件中声明Spinner控件,并在代码中填充数据源,如ArrayAdapter或CursorAdapter。默认情况下,Spinner会显示一个条目,当用户点击时,会弹出一个包含所有条目的下拉列表。这个...
《Hadoop设计模式详解——基于Hadoop 1.2.2》 在大数据处理领域,Hadoop是一个不可或缺的工具,它的出现使得大规模数据处理成为可能。Hadoop 1.2.2是Hadoop的一个重要版本,它为用户提供了稳定、高效的数据存储和...
《数据结构——C++实现》(第二版)是一本深入探讨数据结构理论及其实现的教材,主要面向计算机科学和技术专业的学生以及对数据结构有需求的程序员。这本教材通过C++语言来讲解各种经典数据结构,使得读者能够更好地...
URL 结构详细说明——携带数据 URL(Uniform Resource Locator)是一种用于表示网络资源的地址的字符串,它是互联网上标准的资源地址。 URL 结构由多个部分组成,分别是协议、主机名、端口号、路径、参数、查询和...
Jedis jedis = jedisPool.getResource(); jedis.set("key", "value"); String value = jedis.get("key"); System.out.println(value); } } ``` 有密码访问,集群模式 在集群模式中,我们可以使用 Jedis 的构造...
节点资源池 这是节点的资源池实现。 您可以使用它来处理池连接、文件和其他类型的资源,这些资源的创建操作开销很大。...用法下面是一个关于如何使用 node-resource-pool 和 node-mysql 的例子。初始化 var resource
《iOS应用源码解析——深度探索robin-cocoa-web-resource-8f47f25》 在iOS开发中,源码是理解应用程序工作原理的关键。"robin-cocoa-web-resource-8f47f25"是一个专门针对iOS应用的源码库,它包含了用于构建iOS应用...
《数据库系统概论第四章——安全性控制》详细探讨了如何保护数据库中的数据免受非授权访问、修改或破坏。安全控制主要包括用户鉴别、访问控制、审计控制和数据加密四个核心方面。 用户鉴别是确保只有合法用户能访问...
在本文中,我们将深入探讨如何使用Vue.js框架中的vue-resource插件来实现数据的加载,特别是通过GET方法从服务器获取数据。Vue-resource是Vue.js的一个重要扩展,它提供了与后端进行数据交互的能力,类似于jQuery的$...
NULL 博文链接:https://sichen84.iteye.com/blog/2419876
第五卷《Pattern-Oriented Software Architecture: Patterns for Resource Management》则聚焦于资源管理,包括内存管理、线程池、资源池等模式。这些模式帮助开发者更高效地管理和利用系统资源,提升软件性能和稳定...