Tomcat数据源
Tomcat数据源原理,配置,使用
在程序中,使用数据源是可以提升操作性能的,这种性能 的提升依靠运行的操作原理。
传统的JDBC操作:
1. 加载数据库驱动,通过CLASSPATH配置
2. 通过DriverManager类取得数据库连接对象
3. 通过Connection实例化PreparedStatement对象,编写SQL命令操作数据库
4. 数据库属于资源操作,操作完成后,进行数据库的关闭以释放自愿
对于不同的用户只有操作3不同,而对于1,2,4三个步骤都属于重复的操作。
如果开发中直接使用JDBC操作的话,就会产生性能的问题。怎么做更合适呢?
如果假设数据库不关闭,以后如果有新的用户使用的时候,直接去一个已经有的连接的话,那么
假设有100把伞,如果现在不下雨,肯定不能把所有的伞都摆上,所以一般平常如果没有人用的时候,至少摆上10把,当然最大的时候只能提供100把伞。
还需要一个等待的时间。
最小维持的数据库连接数,最大允许打开的连接数,等待的时间。
Tomcat4.1之后就开始支持这种操作了,这种操作称为数据库连接池,存放的是所有的数据库连接。
在web容器中,数据库的连接池都是通过数据源javax.sql.DataSource访问的,即,可以通过javax.sql.DataSource类得到一个Connection对象,如果要得到一个DataSource对象需要使用JNDI进行查找。
JNDI属于目录命名及目录查找接口,主要功能用于查找,查找对象。EJB也需要使用此概念
但是数据库的连接池需要在tomcat上完成配置。
配置mysql数据库连接池的语法:
<Context path="/mldn" docBase="D:\mldnwebdemo" reloadable="true">
<Resource name="jdbc/mldn"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="mysqladmin"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/mldn"/>
</Context>
1. 开启mysql服务
2. 修改server.xml文件才能起作用
此配置有几个参数:
1. name:表示数据源的名称,也是要查找的名称
2. auth:表示由容器负责资源的连接
3. type:表示对象,数据源上每一个绑定的都是DataSource
4.maxActive:最大连接数
5. minIdle:最小维持的数量
6. maxWait:最大等待时间
对于连接授权有两种:Container,Application(应用程序必须程序化的登录到资源管理器,很少使用,使用Container比较多)
如果想配置oracle,只需要更改用户名密码,还有
driverClassName=oracle.jdbc.driver.OracleDriver
url="jdbc:oracle:thin:@localhost:1521:MLDN"
现在使用的tomcat版本是6.0,要想让数据源起作用,还需要更改项目中的web.xml文件:
<resource-ref>
<res-ref-name>jdbc/mldn</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
要想使用数据源的话,用以下方法
查找数据源, 通过JNDI查找:
1. 初始化名称查找上下文:Context ctx=new InitialContext();
2. 通过名称查找DataSource对象:DataSource ds=(DataSource)ctx.lookup(JNDI名称);
3. 通过DataSource取得一个数据库连接:Connection conn=ds.getConnection();
通过JSP访问的话,代码如下:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String DSNAME = "java:comp/env/jdbc/mldn" ; // 名称
Context ctx = new InitialContext() ;
DataSource ds = (DataSource) ctx.lookup(DSNAME) ;
Connection conn = ds.getConnection() ; // 从连接池中取连接
%>
<%=conn%>
<%
conn.close() ; // 表示将连接放回到池之中
%>
</body>
</html>
所以如果用DAO模式开发时,就可以把DatabaseConnection.java改成如下格式:
package cn.mldn.lxh.dbc ;
import java.sql.* ;
import javax.sql.* ;
import javax.naming.* ;
public class DatabaseConnection {
private static final String DSNAME = "java:comp/env/jdbc/mldn" ;
private Connection conn ;
public DatabaseConnection() throws Exception {
Context ctx = new InitialContext() ;
DataSource ds = (DataSource) ctx.lookup(DSNAME) ;
this.conn = ds.getConnection() ;
}
public Connection getConnection(){
return this.conn ;
}
public void close() throws Exception {
if(this.conn != null){
try{
this.conn.close() ;
}catch(Exception e){
throw e ;
}
}
}
}
Tomcat数据源的更多相关文章
- 07.十分钟学会tomcat数据源
一.数据源的作用及操作原理 1, 首先先看下传统JDBC的操作 在tomcat中使用数据库连接池操作数据库 2,JNDI属于命名及目录查找接口,在javaee的javax.naming包中 这套AP ...
- Tomcat数据源的原理,配置及使用(JNDI)
Tomcat数据源的原理,配置及使用 知识点: 1.数据源的作用及操作原理; 2.Tomcat中数据源的配置; 3.数据源的查找及使用 传统JDBC使用过程存在以下四个步骤: 1.加载驱动程序 2.进 ...
- JDBC 学习复习9 配置Tomcat数据源
在实际开发中,我们有时候还会使用服务器提供给我们的数据库连接池,比如我们希望Tomcat服务器在启动的时候可以帮我们创建一个数据库连接池,那么我们在应用程序中就不需要手动去创建数据库连接池,直接使用T ...
- Tomcat数据源(DataSource)简介
JDBC2.0提供了javax.sql.DataSource接口,它负责建立与数据库的连接,在应用程序中访问数据库时不必编写连接数据库的代码,可以直接从数据源获得数据库连接 1.数据库和连接池 在Da ...
- java web(二) Tomcat数据源
一.数据源的产生 1.JDBC操作原理 (1) 加载数据库驱动程序(数据库驱动程序可通过classpath配置): Class.forName(); (2)通过DriverManager类取得数据库连 ...
- Tomcat 5.5 JNDI Resource 配置 (tomcat数据源配置)
转自:http://blog.csdn.net/fenglibing/article/details/4528512 Tomcat 5.5 JNDI Resource 配置 Author Blog:h ...
- TOMCAT数据源连接配置
/* *本文档简单介绍系统使用TOMCAT6.0数据源方式连接数据库的配置方法: *1,系统环境: gdczsam4.0 + Tomcat6.0 + JDK1.5 + SQL Server2008 ...
- mysql wait_timeout 8小时问题解决,tomcat数据源的配置
异常报错: 2017-02-13 09:30:17.597 [startQuertz_Worker-6] ERROR com.autoyol.task.TransStatManageTask#exec ...
- 使用Tomcat数据源的方式访问数据库(MySql) --Struts2框架应用与开发
1.为方便测试首先创建数据库和表,然后插入测试数据 2.打开Tomcat服务器安装目录的conf/下的context.xml,配置context.xml文件. 在<Context>标签 ...
随机推荐
- Raft协议详解-leader发送心跳代码go
如果已经把最新的log更新了,那就多等一会,反之,很快就广播AppendEntries(也就是心跳消息) func (rf *Raft) LeaderState() { time.Sleep(10 * ...
- 关于array_agg 函数
今天一个客户问怎样把表中相同键值对应的文本按照一定顺序拼接起来.如果使用SQL实现将非常麻烦,并且效率低下.GP4.1以后提供了一个函数array_agg可以方便快捷,高效的实现该功能 比如原始查询是 ...
- android 联网
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="htt ...
- VBS基础篇 - 循环语句(4) - For Each...Next
VBS基础篇 - 循环语句(4) - For Each...Next For Each...Next 循环与 For...Next 循环类似.For Each...Next 不是将语句运行指定的次 ...
- spring Stack Overflow
1. ApplicationContext 不关闭,资源泄露问题: Spring ApplicationContext - Resource leak: 'context' is never clos ...
- hdu_2842_Chinese Rings(矩阵快速幂)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题意:解开第k个环需要先解开前(k-2)个环,并留有第(k-1)环.问解开n环最少需要几步. 题 ...
- hdu_5707_Combine String("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5707 题意:给你三个字符串 a,b,c,问你 c能否拆成a,b,a,b串的每一个字符在c中不能变 题解 ...
- A框架 第二部 实例化接收到的get类,调用父类抽象方法,自动执行方法call_user_func_array()
01父类抽象类 abstract.php <?phpabstract class controller_abstract{ protected $app; function __construc ...
- ADT(abstract data types)抽象数据类型
1.What is it? An abstract data type is a set of objects together with a set of operations. 抽象数据类型是带有 ...
- Hadoop 中关于 map,reduce 数量设置
map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务的分布式并行计算,从这个观点来看,如果将map和reduce的数量设置为1,那么用户的任务 ...