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万次连接,极大 ...
随机推荐
- AntDesignBlazor 学习笔记
AntDesignBlazor是基于 Ant Design 的 Blazor 实现,开发和服务于企业级后台产品.我的 Blazor Server 学习就从这里开始,有问题可以随时上 Blazor 中文 ...
- tomcat禁用PUT,DELETE等一些不必要的HTTP方法
一.背景 公司进行安全整改, 技术要求:系统软件所需支撑的WEB容器环境应禁止除GET和POST外其他HTTP(S)方法. 提供凭证:建议在不影响业务的前提下,禁用PUT.DELETE.HEAD.OP ...
- 智能停车场车牌识别系统【python】
百度AI:https://ai.baidu.com 申请App_id 代码重点:pip install baidu_api from aip import AipOcr import os # 百 ...
- kali操作系统安装google浏览器
安装的kali操作系统版本是kali-linux-2020.2-installer-amd64.iso 参考链接:https://www.cnblogs.com/Young-wind/p/585502 ...
- vue+element实现分页--之--前端分页
效果图: 访问的数据量小,一次返回所有数据,再次利用elementUI-Table 和el-pagination组件进行展示,关键点事数据的筛选 官网的完整案例 <div class=" ...
- maven 与profile,resources,properties 关系
top 的 pom.xml 看<profiles>的标签 <profiles> <!--dat环境--> <profile> <id>DAT ...
- djinn靶机
仅供个人娱乐 靶机信息 https://download.vulnhub.com/djinn/djinn.ova 一.主机探测 二.漏洞的查找和利用 21端口ftp 匿名登录 7331端口 命令执行 ...
- openresty——yum安装 配置 使用 错误处理 docker方式安装
yum方式安装 wget https://openresty.org/package/centos/openresty.repo mv openresty.repo /etc/yum.repos.d/ ...
- Python中input()函数用法
input()函数获取用户输入数据,实现用户交互 语法格式: 变量 = input("提示信息") input()返回的是字符串,无论输入的是数字还是字符串,默认的输入结束键是回车 ...
- 大龄程序员的出路在哪里?八年老Android的一点心得
这篇文章,给大家聊聊Android工程师的职业发展规划的一些思考,同时也给不少20多岁.30多岁,但是对自己的职业未来很迷茫的同学一些建议. 笔者希望通过此文,帮大家梳理一下程序员的职业发展方向,让大 ...