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万次连接,极大 ...
随机推荐
- vue(23)Vuex的5个核心概念
Vuex的核心概念 Vuex有5个核心概念,分别是State,Getters,mutations,Actions,Modules. State Vuex使用单一状态树,也就是说,用一个对象包含了所 ...
- 看懂UML类图笔记
在学习设计模式的时候,经常会遇到UML类图,所以就找了一些资料,做一些笔记. 从一个示例开始 下面这个类图,类之间的关系是我们需要关注的: 车的类图结构为<<abstract>> ...
- 使用Angular CDK实现一个Service弹出Toast组件
在Angular中,官方团队在开发Material组件库的同时,顺手做了一套Component dev kit,也就是在Angular世界中大名鼎鼎的CDK,这套工具包提供了非常多的前端开发的通用功能 ...
- 前端基础js(四)
一. js [1] html:用于显示页面 [2] css:用于描述页面的样式 [3] javaScript:用于描述页面的行为 二.js中三大部分内容 [1] 基本语法:函数.对象.事件类型(变量, ...
- ELK:match 的底层转换
在ES中,执行match搜索的时候,ES底层通常都会对搜索条件进行底层转换,来实现最终的搜索结果.如: GET /student/java/_search { "query": { ...
- C++第三十七篇 -- 调试驱动程序
上一篇写的KMDF程序是通过串口进行配置的,那么我们在VS中Attach to process外,可以直接用Winbdg进行调试,winbdg.exe所在路径为C:\Program Files (x8 ...
- OpenFaaS实战之七:java11模板解析
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Windows 系统安装 git基础小白的简单操作包含基本输入命令
首先 去官网下载git应用 https://git-scm.com/downloads 点击前往 安装的操作也比较简单,一直点击下一步 安装完成之后 在空白桌面点击是否有 Git Gui ...
- Notes about "Exploring Expect"
Chapter 3 Section "The expect Command": expect_out(0,string) can NOT be written as "e ...
- 基于ScheduledExecutorService的并发定时任务处理能力测试
测试代码 定时器类 package business.util; import java.util.concurrent.Executors; import java.util.concurrent. ...