Java中连接池

最近在看书,其中有一段是:

相信有大佬已经能看得出来这是《企业IT架构转型之道》这本书了(这是一本不错的书,推荐工作时长>2年的软件人员可以看看)~~

对于红色框内的那段文字,我有两个概念不是很明白:

1、应用实例指的是什么?

2、连接池是什么?在什么时候发挥作用?以及什么时候被配置上?

带着疑问,我查阅了大量的资料,也问了大神,大概弄清楚了。

应用实例

应用实例指的是一个应用需要连接数据库的后台(如淘宝后台就是一个应用实例)。

连接池

说到Java中的连接池,我们不可避免的要说到数据库连接池(connection pool),Java连接池就是数据库连接池在Java上的应用。

大家都知道,对于资源共享,有一个很有名的设计模式-资源池(Resource Pool)。网络上对于资源池的解释是这样的:

 简言之,连接池是将已经创建好的连接保存在池中,当检测到有请求时,直接使用创建好的连接对数据库进行访问,这样可以节省创建连接和销毁连接所带来的的时间成本。

在数据库连接池中,涉及到三个主要的参数:

- 最大维持连接数:没有任何请求时在连接池中可以存在的连接数

- 最大连接数:连接池中最多可以存在的连接个数。

- 最大等待时间:当断开连接时,超过最大维持连接数的连接不会马上销毁,最大等待时间过后它才会销毁。

参数使用的场景实例如下:

当最大维持连接数是10,最大连接数是20,最大等待时间是10000(毫秒)时,
访问数据库,调用连接池的过程是:最开始在连接池中有10个连接(最大连接数),当有用户申请连接时,其将一个连接分配用户,直到连接池中的10个连接全都分配出去。当第11个用户申请连接时,它将创建第11个连接并分配给该用户,直到把第20个连接(最大连接数)分配给第20个用户。
当第21个用户申请连接时,它需要等待,直到前面的20个用户中某一个断开了连接,才会把那个连接分配给第21个用户,当用户断开连接时(第11至20个连接),该连接不会立刻被释放而是需要等待10000毫秒(最大等待时间),才被释放,当没有用户连接时,连接池内还保持10个连接。

至此,数据库连接池是什么以及在什么时候发挥作用基本很清楚了。现在来讨论下他怎么被配置。

在应用的META-INF文件夹下创建一个context.xml配置文件,并在其中添加<Context>标签进行配置,但,这种方式生成的数据源只能用于当前应用。

<?xml version="1.0" encoding="utf-8" ?>  
<Context>  
<Resource name="jdbc/EmployeeDB" 当前创建数据连接池的名字,自己定义,在使用jndi容器获取该数据源对象时会用到  auth="Container" 作者  type="javax.sql.DataSource" 对象类型这里固定为DataSource即可  username="dbusername" 数据库连接的用户名  password="dbpassword" 连接密码  driverClassName="com.mysql.jdbc.Driver" 驱动  url="jdbc:mysql:///dbcptest" 数据库的url  maxActive="8"  DBCP的参数,DBCP的其他参数可以加入  maxIdle="4"/>  
</Context>  

在tomcat启动时,会逐个加载其中的应用,当其加载到当前应用时,会加载到 META-INF文件夹下的 context.xml 配置文件,此时tomcat会根据其中的配置信息为当前应用创建一个数据库连接池,该数据库连接池只能用于当前应用,tomcat下的其他应用无法使用该数据库连接池。

附加:虽然数据库连接池可以帮助我们节省大量的时间成本,但在开发中,使用连接池时若没有关闭连接(调用连接的close方法)会出现“连接池疲劳的错误”。

扩展阅读

- Java 中几种主流的数据库连接池

- 三种数据库连接池的配置及使用(For JDBC)

- TomCat 源码分析-线程池应用

- 详解TomCat的连接数与线程池

- 连接池含义、作用和工作过程(四个流行的Java连接池)

 

转载于:https://www.cnblogs.com/lilala-world/p/11156771.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中 用选择结构编译算法,C语言程序设计立体化教程(高等教育立体化精品系列规划教材)...

导语内容提要李刚、唐炜主编的《C语言程序设计立体化教程(高等教育立体化精品系列规划教材)》主要分为四篇&#xff1a;语法基础篇、程序设计结构篇、初级应用篇和高级应用篇&#xff1b;其中第一篇语法基础部分介绍了C语言概述和C语言数据与运算&#xff1b;第二篇程序设计结构…

第二次实验报告(漏)

C程序设计实验报告 实验项目&#xff1a; 1.if语句的应用2.switch/case语句的应用3.switch/case语句嵌套if语句的应用4.switch/case结构的嵌套应用5.分析程序 姓名&#xff1a;王治林   实验地点&#xff1a;514教室   实验时间&#xff1a;2019.4.3 一、实验目的与要求 …

BAT教程 :第五节(set命令详解)

先回顾一下他设置自定义变量的用法例子:echo offsetvar我是值echo%var%pause请看setvar我是值,set是命令 var是变量名 号右边的"我是值"是变量的值在批处理中我们要引用这个变就把var变量名用两个%(百分号)扩起来,如%var%这种SET语法只能直接在BAT代码的提前赋予变…

rip c语言,GNU C 对标准C语言的扩展

特殊属性声明GNU C 允许声明函数、变量和类型的特殊属性&#xff0c;以便进行手工的代码优化和定制。如果要指定一个属性声明&#xff0c;只需要在声明后添加__ attribute __((ATTRIBUTE))。其中ATTRIBUTE为属性说明&#xff0c;如果存在多个属性&#xff0c;则以逗号分隔。GNU…

python学习格式化输出(一)

name input(请输入你的姓名&#xff1a;) age input(请输入你的年龄&#xff1a;) job input(你的职业是&#xff1a;) msg -------------info %s------------ 我的名字叫&#xff1a;%s 我的年龄&#xff1a;%s 我的职业是&#xff1a;%s ------------end-------------- %…

Ubuntu linux上Nautilus安装RabbitVCS扩展

安装包 $ sudo add-apt-repository ppa:rabbitvcs $ sudo aptitude update $ sudo apt-get install rabbitvcs-core rabbitvcs-nautilus 重新启动nautilus $ nautilus -q 转载于:https://www.cnblogs.com/wdpp/archive/2010/11/22/2386291.html

bat与C语言混合编程,BAT与HTML混合编程的方法

:οnkeypresswindow.close()>colorgreen>HTMLCodes我一直是菜菜。就楼主这个帖来说&#xff0c;其思想就是把VBS混合编程的思想用到html语言上&#xff0c;随便举个混合编程的例子&#xff0c;来表达(我就懂点点VBS)楼主此贴的思想&#xff1a; 2>nul 3>nul&ec…

小数转换成二进制c语言,只写出了十进制小数转换成二进制的,求二进制小数转十进制的...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include #define NUM 2#define ZERO 0.000001int PrnMainMenu(void);void ProcessLoop(void);void two(void);void ten(void);int a,b[10],i0,c0;void integer(int n) //定义整数部分{if(n>0){integer(n/NUM…

SAS 读取数据文件

每次读取数据时需要告诉SAS3件事&#xff1a;1&#xff1a;数据存在哪里&#xff1f;2&#xff1a;数据的形式3&#xff1a;创建的数据集的类型&#xff08;永久/临时&#xff09; 1 读取SAS数据集 DATA temp; /*temp 为创建的数据集名称*/ INFILE C\mysas\data\temp.dat; /*数…

C++ 数制转换

一、十进制 转换成 n 进制 这里要求 1< n < 9 转换函数实现如下 //将十进制 dec 转换成 n 进制&#xff0c;结果存在 other中&#xff0c;other在外部分配内存 void Decimal_to_Other(int dec, char *other, int n) { //1 < n < 9 int i0; int dec_copy dec; char…

计算机二级C语言考的函数,【帮考网】2012计算机等级二级考试C语言:函数递归...

一、栈在说函数递归的时候&#xff0c;顺便说一下栈的概念。栈是一个后进先出的压入(push)和弹出(pop)式数据结构。在程序运行时&#xff0c;系统每次向栈中压入一个对象&#xff0c;然后栈指针向下移动一个位置。当系统从栈中弹出一个对象时&#xff0c;最近进栈的对象将被弹出…

自我总结篇之vue的组件通信(父传子 子传父 非父子)

一&#xff1a;父传子 父组件代码如下&#xff1a; <template><div class"father"><child :messagemessage :message2message2></child> </div> </template> <script> import child from /components/child.vue export de…

Window Server 2008中开启Window Media Player功能

Window Server 2008中开启Window Media Player功能 服务器管理器 功能 优质Windows音频视频体验 打勾 安装 其它功能有&#xff1a; 桌面休验 等.... the end! 转载于:https://www.cnblogs.com/sqlite3/archive/2010/12/02/2566887.html

c语言数据结构kmp中next计算,数据结构——关于KMP算法中next函数的详细解析

以前看到数据结构中字符串的模式匹配时&#xff0c;花了半天的时间&#xff0c;才把KMP算法中的next函数整明白了&#xff0c;结果过了几天在看到这时&#xff0c;只记得next[j1]next[j]1&#xff0c;但是有时候能套公式正确算出&#xff0c;有时候就算不对&#xff0c;因此今天…

浅谈“微服务”

微服务概述 1.1 易于扩展 1.2 部署简单 1.3 技术异构性 数据库的服务化切分 2.1 什么是“分库分表”&#xff1f; 2.2 数据库扩展的几种方式 2.3 分库分表的几种方式 2.4 引入分库分表中间件后面临的问题 2.5 现有分库分表中间件的横向对比 微服务架构中的分布式事务 3.1 什么…

liigo:爱可视70平板电脑使用感受,遗憾与满足并存

我想大部分人来这里&#xff0c;不是想听美言的。许多资料、宣传性文章、评测、视频等等&#xff0c;网络上已经有很多了&#xff08;其中外文占很大比例&#xff09;。 我想大部分人来这里&#xff0c;是想听真正的使用感受的。我想&#xff0c;我这里提到的许多内容&#xff…

c语言 拓补排序源代码,拓扑排序C语言代码

#include#include#include#include//----------------公共的-----------------#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2//---------------------------------------//*************栈的初始大小和增量*************…

visual studio 正则表达式 查找与替换文本

好多时候想要重构一些代码&#xff0c;但是修改起来发现很麻烦&#xff0c;因为简单的文本替换不能满足需求&#xff0c;这时候就要借助ide的力量了。还好visual studio 2010支持正则表达式查找和替换。如下图所示&#xff1a; document.all.domElementA.style.visibility hid…

51 Python - 装饰器 参数化装饰器——装饰器更通用

05参数化装饰器——装饰器更通用 参数化装饰器如何理解&#xff0c;简单理解就是让装饰器可以通用。场景举例&#xff0c;现在有个需求要改某一段文字&#xff0c;既要加<P>标签&#xff0c;又要加<B>&#xff0c;还有加<Div>。是不是意味着需要定义多个装饰…

手机android怎么开机画面,Android使用BroadcastReceiver实现手机开机之后显示画面的功能...

本文实例讲述了Android使用BroadcastReceiver实现手机开机之后显示画面的功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;在此例中介绍了怎样使用BroadcastRececiver。使用BroadcastReceiver需要继承这个类&#xff0c;并且重写public void onReceiver(Context co…