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 一、实验目的与要求 …

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

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

浅谈“微服务”

微服务概述 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…

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>。是不是意味着需要定义多个装饰…

python中numpy矩阵运算操作大全(非常全)!

python中numpy矩阵运算操作大全&#xff08;非常全&#xff09; //2019.07.10晚python矩阵运算大全1、矩阵的输出形式&#xff1a;对于任何一个矩阵&#xff0c;python输出的模板是&#xff1a;import numpy as np #引入numpy模块np1np.array([[1,2,3],[1,3,4],[1,6,2]...]) #数…

【摘录】MTK按键扫描原理及相关代码

一&#xff0e;MTK按键扫描原理&#xff1a; 不同的MTK平台内部提供的按键数目各有不同&#xff0c;但是扫描原理大致一样&#xff0c;这里以MTK6253为例来讲解记录。 MTK提供6*7共42个矩阵键盘&#xff0c;加上Power键总共43个按键&#xff0c;其中BB芯片引出6根行线ROW&#…

导致Android手机崩溃的壁纸,使用错误的壁纸会使你的Android手机崩溃

原标题&#xff1a;使用错误的壁纸会使你的Android手机崩溃现代智能手机是非常复杂的&#xff0c;能够显示大量的内容&#xff0c;并能浏览一系列复杂的色域、文件格式和媒体类型。然而&#xff0c;其中一些功能会以意想不到的方式影响到正常使用。Twitter用户Ice Universe发现…

android app逆向分析,如何开始对Android应用的逆向分析?

本文是我的关于如何开始Android逆向系列文章的第一部分。在文末提供了一个文档&#xff0c;你可以根据该文档说明部署同我一样的实验环境。在了解android应用的逆向之前&#xff0c;你必须对android平台及其架构和android应用程序的构建块(组件)已有了一个较好的理解。如果你并…

Swipper.js实现轮播功能

我是歌谣 放弃很难 但是坚持一定很酷 微信公众号关注小歌谣 今天我们来说一下工作中的一个小需求 就是给我们的页面去实现一个轮播的功能 最近需要实现一个小的需求 就是如何类似于如何把一个图片变成一个轮播效果 于是乎就开始考虑 用一款插件去实现这个功能 所以选择了一…

Spring.NET 1.3.1 正式版已发布

Spring.NET 1.3.1 下载地址为http://www.springframework.net/download.html 正如已经提到的其他地方&#xff0c;这将是Spring.NET的最终版本提供支持的。NET1.x中Spring.NET的未来版本将只针对。NET 2.0和更高版本&#xff0c;让Spring.NET更积极地利用近期功能的更多信息在。…

android wifi连接手机,Android手机无线连接利器-AirDroid

AirDroid是一款可以在电脑的浏览器上对手机进行管理的应用&#xff0c;需要wifi网络支持&#xff0c;手机安装启用服务后&#xff0c;在pc的浏览器即可登陆进行管理和操作&#xff0c;可以管理联系人、短信、文件、应用、照片、铃声、音乐、通话记录&#xff0c;还可以快速搜索…

RFC函数的初步使用-同步

1、由于没有外围系统&#xff0c;采用不同SAP不同client之间进行测试。 首先在A-client搭建需要被调用的RFC函数。在A-client里运行SE37创建函数 在属性页签选择“远程启用的模块” 设定inport参数&#xff0c;传入人员名称去取usr21中的值 设定export参数&#xff0c;其中zper…

Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)...

Android开发平台中&#xff0c;可通过TelephonyManager 获取本机号码。 TelephonyManager phoneMgr(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);txtPhoneNumber.setText(phoneMgr.getLine1Number()); //txtPhoneNumber是一个EditText 用于显示手机号注…

判断cloudblob是否存在

这是开博的第一篇&#xff0c;还要废话一下。我写的很多内容都是网上找资料然后自己总结出来的&#xff0c;原出处已经很难找到了&#xff0c;所以不会标出引用的内容。如果侵犯到您的版权&#xff0c;请和我联系&#xff0c;我会删改相关的内容。 cloudblob 是azure blob的一个…

android studio炸包怎么导入,请问android studio如何引入包

梦里花落0921jar包放项目根目录libs文件夹右键选择Add As Library"剩选项默认行点击。Show import popup&#xff0c;这个是用于编辑XML时&#xff0c;自动会弹出一个import的对话框&#xff0c;问你是否需要导入。JavaInsert imports on paste:(All Ask None),这个其实就…

动态规划-直方图最大长方形

/* 1017: C03-单调栈算法-最大长方形时间限制: 1 Sec 内存限制: 128 MB 提交: 17 解决: 10 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述给你一个直方图&#xff0c;告诉你各个条形矩形的高度&#xff0c;求基线对齐构成的矩形中面积最大的矩形的面积。对于每一个矩形…

Metropolis Hasting算法

Metropolis Hasting Algorithm: MH算法也是一种基于模拟的MCMC技术&#xff0c;一个很重要的应用是从给定的概率分布中抽样。主要原理是构造了一个精妙的Markov链&#xff0c;使得该链的稳态是你给定的概率密度。它的好处&#xff0c;不用多说&#xff0c;自然是可以对付数学形…