JavaWeb之数据库连接池
时间:2016-12-2 23:56
——DBCP连接池
连接池参数(所有连接池参数都有默认值):
初始大小
最小空闲连接数
增量
最大空闲连接数
最大连接数
最长等待时间
四大连接参数:
连接池也是使用四大连接参数来完成创建连接对象的。
实现的接口:
连接池必须实现:javax.sql.DataSource接口。
连接池返回的Connection对象,它的close()方法并不是关闭连接,而是把连接归还给连接池,使用的是装饰设计模式。
dbcp.properties配置:
#基本配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=root
#初始化池大小,即一开始池中连接对象的数量
#默认值为0
initialSize=0
#最大连接数,如果设置maxActive=50时,表示池中最多可以有50个连接,包含使用和未使用的连接
#默认为8,如果设置为非正数,表示无限大
maxActive=8
#最大空闲连接数
#默认为8,如果设置为非正数,表示无限大
maxIdle=8
#最小空闲连接数
#默认值为0
minIdle=0
#最大等待时间
#当设置maxWait=5000时,表示等待5秒,超时会抛出异常
#默认值为-1,表示无期限等待,超时不会抛异常
maxWait=-1
#连接属性
#就是之前放在url之后的参数,现在可以使用connectionPreperties来指定
#userServerPrepStmts=true,表示MySQL开启预编译功能。
#cachePrepStmts=true,表示MySQL开启缓存PrepareStatement功能。
#prepStmtCacheSize=50,表示缓存PreparedStatement的上限。
#prepStmtCacheSqlLimit=300,当SQL模板长度大于200时,就不再缓存它。
#连接的默认提交方式
#默认值为true,表示自动提交事务
defaultAutoCommit=true
#连接是否为只读连接
#Connection有一对方法,setReadOnly(boolean)和isReadOnly()
#如果是只读连接,那么只能用这个连接来做查询
#指定连接为只读是为了优化,这个优化与并发事务相关
defaultReadOnly=false
#指定事务的事务隔离级别
#可选值:NONE, READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
#如果没有指定,那么由驱动中的Connection类自己来决定。
defaultTransactionIsolation=REPEATABLE_READ
——装饰设计模式
对象增强的手段:
1)继承
* 被增强的对象是固定的
* 增强的内容也是固定的
2)装饰设计模式
* 被增强的对象是可以切换的
* 增强的内容时固定的
3)动态代理
* 被增强的对象可以切换
* 增强的内容也可以切换
是你还有你,一切拜托你。
class MyConnection implements Connection { //是你
//还有你
private Connection conn; //底层对象,也是被增强对象
//通过构造器传递底层对象
public MyConnection(Connection conn){ //使用父类接口接受参数,保证能够接收任意参数
this.conn = conn;
}
//一切拜托你,表示使用底层对象来调用全部方法
public Statement createStatement() {
return conn.createStatement();
}
//被装饰(增强)方法
public void close() {
将当前连接归还给连接池,而不是关闭。
}
}
——C3P0连接池
C3P0是开源免费的连接池。
输出结果:com.mchange.v2.c3p0.impl.NewProxyConnection@6adca536
可以看到实现的是c3p3接口,并且创建了一个新的动态代理,而非装饰类。
——使用C3P0配置文件创建连接池
2、文件位置:必须在src目录下。
c3p0也可以指定配置文件,而且配置文件可以是properties,也可以是XML文件,当然,XML更高级一些。但是c3p0的配置文件名必须为c3p0-config.xml,并且必须放在类路径下。
配置文件信息:
程序代码:
——使用C3P0创建JDBCUtils
——Tomcat配置连接池
JNDI的作用就是:在服务器上配置资源,然后通过统一的方式来获取配置的资源。
这里要配置的资源当然是连接池了,这样项目中就可以通过统一的方式来获取连接池对象了。
2、下面的配置是Tomcat文档提供的:
配置JNDI资源需要到<Context>元素中配置<Resource>子元素:
* name:指定资源的名称,这个名称可以随便给,在获取资源时需要这个名称。
* factory:用来创建资源的工厂,这个值基本是固定的。
* type:资源的类型,我们要给出的类型当然是我们连接池的类型了。
用于生成该类的对象,例如“com.mchange.v2.c3p0.ComboPooledDataSource”。
/>
3、获取资源
配置资源的目的当然是为了获取资源,只要一启动Tomcat,那么就可以在项目中任何类中通过JNDI获取资源的方式来获取资源了。
与上面Tomcat文档提供的配置信息对应的获取资源代码如下:
Context cxt= new InitialContext();
Context envCxt = (Context)cxt.lookup("java:comp/env");
MyBean bean = (MyBean)envCxt.lookup("bean/MyBeanFactory");
Connection conn = bean.getConnection();
writer.print("foo = " + bean.getFoo() + ", bar = " + bean.getBar());
获取资源:
* Context:javax.naming.Context
* InitialContext:javax.naming.InitalContext
* lookup(String):获取资源的方法,其中“java:comp/env”是资源的入口(这是固定的名称),获取的对象是一个Context,这说明需要在获取到的Context上进一步进行获取。“bean/MyBeanFactory”对应<Resource>中配置的name的值,通过该name值获取到的就是资源对象了。
// 1、创建JNDI的上下文对象
JavaWeb之数据库连接池的更多相关文章
- JavaWeb基础—数据库连接池DBCP、C3P0
一.基本概念 数据库连接池负责分配.管理和释放数据库连接 数据库连接池:(池用map来实现居多) 用处:为了可重用(销毁创建麻烦,开销大)(招培训老师的例子) 二.编写实现数据库连接池 池参数: 初识 ...
- MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)
设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计 ...
- JavaWeb学习总结(十三)--数据库连接池
一.数据库连接池的概念 用池来管理Connection,这可以重复使用Connection.有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Co ...
- javaweb学习总结(三十九)——数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- 20160409 javaweb 数据库连接池
1.自己编写数据库连接池: package com.dzq.pool; import java.io.PrintWriter; import java.lang.reflect.InvocationH ...
- JavaWeb学习(三十)———— 数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- javaweb(三十九)——数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- JavaWeb学习笔记(十七)—— 数据库连接池
一.数据库连接池概述 1.1 为什么使用数据库连接池 如果用户每次请求都向数据库获得连接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建1 ...
- javaweb基础(39)_数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
随机推荐
- linux xsel命令
xsel操作在三个寄存器上,其中一个是系统剪切板(-b).一个是默认寄存器(-p).一个是(-s)
- mysql实现主从复制、读写分离的配置方法(二)
由于接触主从复制,读写分离的时间比较短,应用还不够熟练,目的是能通过MyCat实现基础的读写分离操作. 其核心功能是分库分表,配合数据库的主从模式还可实现读写分离. 1. 测试环境 一台win10主机 ...
- 03_Nginx支持SSL
1.申请证书 https://freessl.cn/ 2.创建证书 3.离线生产 4.下载Keymanager https://keymanager.org/ 5.打开生产密钥 6.DNS验证 进入域 ...
- 深入刨析tomcat 之---第1篇,解决第1,2章bug 页面不显示内容Hello. Roses are red.
writedby 张艳涛, 第一个问题是不显示index.html网页 19年才开始学java的第二个月,就开始第一遍看这本书,我估计当初,做第一章的一个案例,自己写代码,和验证就得一天吧,当初就发现 ...
- 右键发送 (sendto),创建快捷方式到自定义的位置,不仅仅是复制,就像 发送到 桌面快捷方式 一样
TL;DR 在 SendTo 文件夹里加上一文件夹的快捷方式后,在右键发送到这个文件夹的是这些文件的一个副本,实际上是一个复制的过程,有时候我们只希望是快捷方式,那就得另想办法了. 方案如下: 创建一 ...
- thinkphp 初始化
public function _initialize(){ //$top_img = M('adv')->where(array('adv_id'=>1057))->find(); ...
- ASP.NET Core下FreeSql的仓储事务
ASP.NET Core下FreeSql的仓储事务 第一步:配置 Startup.cs 注入 引入包 dotnet add package FreeSql dotnet add package Fre ...
- OpenGL学习笔记(三)着色器
目录 Shader是什么 GLSL 数据类型 输入与输出 顶点着色器向片段着色器发送数据 Uniform 制作三色渐变三角形 对着色器程序进行封装 参考资料:OpenGL中文翻译 Shader是什么 ...
- OpenFaaS实战之八:自制模板(maven+jdk8)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- vue页面初始化
HTML: <div id="app"> <input type="" class="app" v-model=" ...