Tomcat 数据源的原理、配置、使用
1、数据源的作用及操作原理
在程序代码中使用数据源是可以提升操作性能的,这种性能的提升依靠于运行的原理。
传统JDBC操作步骤
1、加载数据库驱动程序,数据库驱动程序通过CLASSPATH配置;
2、通过DriverManager类取得数据库连接对象;
3、通过Connection实例化PreparedStatement对象,编写SQL命令操作数据库;
4、数据库属于资源操作,操作完成后进行数据库的关闭以释放资源。如图所示:

对于不同的用户只有操作不同,但是对于1、2、4三个步骤很明显是一个重复的操作。
如果开发中直接使用JDBC操作的话,那么就会产生这种性能的问题,那么怎么做最合适呢?
如果假设数据库不关闭,以后如果有新的用户使用的时候直接取一个已经有的连接的话。
就好比,学校为学生提供雨伞,一旦下雨将为学生准备雨伞,这个时候学生不用再重新去找雨伞,之后再重新去买雨伞。
假设有100把伞,如果现在不下雨,肯定不能把所有的伞都摆上,所以一般平常如果没人用的时候至少摆上10把。当然,最大的时候只能提供100把伞。
还需要一个等待的时间。
最小维持的数据库连接数,最大允许打开的连接数。
Tomcat 4.1 版本之后就开始支持这种操作了,这种操作就称为数据库连接池,存放的是所有的数据库连接。
2、在Tomcat中使用数据库连接池
在web容器中,数据库的连接池都是通过数据源(javax.sql.DataSource)访问的,即:可以通过 javax.sql.DataSource 类取得Connection对象,但是如果要想得到一个DataSource对象需要使用JNDI进行查找。

JNDI(Java Naming and Directory Interface)属于命名及目录查找接口,主要的功能是用于进行查找的,查找对象。
但是,现在的数据库的连接池是需要在Tomcat上完成配置的。
要修改server.xml文件才可以起作用。
如下,以连接mysql为例:
<Context docBase="D:/data/webdemo" path="/webdemo" debug="0" reloadable="true">
<Resource name="jdbc/mydb"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/mydb"/>
</Context>
此配置有几个参数:
·name:表示数据源名称,也是JNDI要查找的名称
·auth:表示由谁负责资源连接,Container:容器管理,application:程序管理,一般设置为 Container
·type:表示对象,数据源上每一个绑定的都是DataSource
·maxActive:表示最大激活连接数,这里取值为100,表示同时最多有100个数据库连接,一般把maxActive设置成可能的并发量
·maxIdle:表示最大的空闲连接数,这里取值为30,表示即使没有数据库连接时依然可以保持30空闲的连接,而不被清除,随时处于待命状态
·maxWait:表示最大等待秒钟数,这里取值10000,表示10秒后超时,如果取值-1,则表示无限等待,直到超时为止,如果超时将接到异常
·username:数据库用户名
·password:数据库登录密码
·driverClassName:数据库驱动名称
.url:数据库url
但是现在使用的Tomcat版本是6.0以上的版本,所以想让一个数据源起作用的话,还必须在web.xml(注意:此web.xml是web项目的web.xml文件,而不是tomcat服务器的web.xml文件)文件之中完成配置。
<resource-ref>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3、查找数据源
数据源的操作使用的是JNDI方式进行查找的,所以如果要想使用数据源取得数据库连接的话,则必须按照如下的步骤进行
初始化名称查找上下文:Context ctx = new InitialContext();
通过名称查找DataSource对象:DataSource ds = (DataSource)ctx.lookup(JNDI名称);
通过DataSource取得一个数据库连接:Connection conn = ds.getConnection()。
此时调用数据库会出现一个Exception:
javax.servlet.ServletException: javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
实际上对于这种资源操作,本身是需要一个环境属性的支持的: java:comp/env,但是Tomcat服务器本身是免费的,没有对这种属性提供支持,如果要想访问Tomcat中的名称服务的话,则肯定要在前面加上此属性,即,现在的名称是: java:comp/env/jdbc/mydb;即用Tomcat的话JNDI名称就是:java:comp/env/JNDI名称 。
以后程序中只认名字,而具体是哪个数据库将由配置决定。
当然,如果现在使用的是DAO开发的,DatabaseConnection.java类。
package com.shawn.mvcdemo.dbc; import java.sql.*;
import javax.sql.*;
import javax.naming.*; public class DatabaseConnection{
private static final String DSNAME = "java:comp/env/jdbc/mldn";//java:comp/JNDI名称 private Connection conn = null; public DatabaseConnection() throws Exception{
Context ctx = new InitialContext(); //初始化名称查找上下文
DataSource ds = (DataSource)ctx.lookup(DSNAME); //通过名称查找DataSource对象
this.conn = ds.getConnection(); //通过DataSource取得一个数据库连接
} public Connection getConnection(){
return this.conn;
} public void close() throws Exception{
if(this.conn != null){
try{
this.conn.close(); //释放数据库连接
} catch(Exception e){
throw e;
}
}
} public static void main(String args[]){
try{
System.out.println(new DatabaseConnection().getConnection());
} catch(Exception e){
e.printStackTrace();
}
}
}
可是有一点也必须注意的是,现在的数据库连接池实在Tomcat上配置的,所以此程序只能在web下运行,而不能使用application程序运行。
总结:
要使用数据库连接池
1、配置server.xml;
2、配置web项目中的(比如:webdemo项目)web.xml文件,添加 resource-ref 配置;
3、修改程序中获取Connection的方式。
Tomcat 数据源的原理、配置、使用的更多相关文章
- Tomcat数据源的原理,配置及使用(JNDI)
Tomcat数据源的原理,配置及使用 知识点: 1.数据源的作用及操作原理; 2.Tomcat中数据源的配置; 3.数据源的查找及使用 传统JDBC使用过程存在以下四个步骤: 1.加载驱动程序 2.进 ...
- JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar
- Tomcat下使用C3P0配置JNDI数据源(在项目的META-INF目录下创建context.xml的文件)
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包
- JNDI学习总结——Tomcat下使用C3P0配置JNDI数据源
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar
- JNDI学习总结(3)——Tomcat下使用C3P0配置JNDI数据源
一.C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?source=navbar 下载完成之后得到一个压缩包. 二.使用C3P0配 ...
- JDBC 学习复习9 配置Tomcat数据源
在实际开发中,我们有时候还会使用服务器提供给我们的数据库连接池,比如我们希望Tomcat服务器在启动的时候可以帮我们创建一个数据库连接池,那么我们在应用程序中就不需要手动去创建数据库连接池,直接使用T ...
- java web(二) Tomcat数据源
一.数据源的产生 1.JDBC操作原理 (1) 加载数据库驱动程序(数据库驱动程序可通过classpath配置): Class.forName(); (2)通过DriverManager类取得数据库连 ...
- tomcat简介及原理解说
Tomcat简介 作者:杨晓(http://blog.sina.com.cn/u/1237288325) 目录: ----Tomcat背景 ----Tomcat目录 ----Tomcat类加载 --- ...
- Tomcat数据源
Tomcat数据源原理,配置,使用 在程序中,使用数据源是可以提升操作性能的,这种性能 的提升依靠运行的操作原理. 传统的JDBC操作: 1. 加载数据库驱动,通过CLASSPATH配置 2. 通过D ...
随机推荐
- I/O设备
I/O(Input/Output)设备是指与计算机进行数据传输的硬件,具体分为字符设备.块设备.网络设备. 字符设备 字符设备(character device),又叫做人机交互设备.用户通过这些设备 ...
- Android 文字转语音(TTS)
1.介绍 2.xml文件布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...
- docker 部署 笔记
Docker虚拟机常用命令 先更新软件包 yum -y update 安装Docker虚拟机 yum install -y docker 运行.重启.关闭Docker虚拟机 service d ...
- LeetCode74.搜索二维矩阵
74.搜索二维矩阵 描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 示 ...
- C++ STL之Set
set是关联容器,类似于集合. 特点是里面的元素不会重复,而且元素时有序的. 1.声明定义: #include<set> using namespace std; set<int&g ...
- JAVA 使用Dom4j 解析XML
[转自] http://blog.csdn.net/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1)下载 ...
- 认识HTML中文本、图片、链接标签和路径
前端之HTML.CSS(一) 开发工具 编辑器 Dreamware.Sublime.Visual Studio Code.WebStorm 浏览器 Chrome.IE(Edge).Safari.Fir ...
- Linux之FTP篇
内容简介: vsftpd的安装 目录介绍 配置参数解释 锁定用户目录 其他用户不能登录 -------------------------------------------------------- ...
- js中的break,continue,return
js中的break,continue, return (转) 面向对象编程语法中我们会碰到break ,continue, return这三个常用的关键字,那么关于这三个关键字的使用具体的操作是什么呢 ...
- BNU29376——沙漠之旅——————【技巧题】
沙漠之旅 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: M ...