Tomcat 数据源 -- 原理、配置、使用

转载地址:http://blog.csdn.net/tanyit/article/details/6942059

server.xml

[html]  view plain copy print ?
  1. <Context path="/demo" docBase="E:\webdemo" reloadable="true">   
  2.             <Manager className="org.apache.catalina.session.PersistentManager">  
  3.             debug=0 saveOnRestart="true"  
  4.             maxActiveSession="-1" minIdleSwap="-1"  
  5.             maxIdleSwap="-1" maxIdleBackup="-1"  
  6.             <Store  
  7.             className="org.apache.catalina.session.FileStore"  
  8.             directory="d:\temp"/>  
  9.             </Manager>  
  10.             <Resource name="jdbc/mydata"  
  11.             auth="Container"  
  12.             type="javax.sql.DataSource"  
  13.             maxActive="100"  
  14.             maxIdle="30"  
  15.             maxWait="10000"  
  16.             username="root"     
  17.             password="root"  
  18.             driverClassName="com.mysql.jdbc.Driver"  
  19.             url="jdbc:mysql://localhost:8080/mydata"/>  
  20.         </Context>  


Tomcat 数据源  -- 原理、配置、使用

      在程序代码之中使用数据源可以提升操作性能的,这种性能提升依靠运行的操作原理


传统JDBC 使用过程中存在以下四个步骤:

     1、加载驱动程序

     2、进行数据库连接

     3、数据库操作

     4、数据库关闭

对于不同的用户只有操作不同,但是对于1、2、4三个步骤很明显是一个重复的操作

       如果开发中直接使用JDBC 操作的话,那么就回产生这种性能的问题,那么这么做才是最合适的呢?

     

JNDI属于命名及目录查找接口,主要的功能是用于进行查找的,查找对象

但是,现在的数据库的连接池是需要在Tomcat上完成配置的。

 要修改server.xml 文件才可以起作用

[html]  view plain copy print ?
  1. <Resource name="jdbc/mydata"  
  2. auth="Container"  
  3. type="javax.sql.DataSource"  
  4. maxActive="100"  
  5. maxIdle="30"  
  6. maxWait="10000"  
  7. username="root"     
  8. password="root"  
  9. driverClassName="com.mysql.jdbc.Driver"  
  10. url="jdbc:mysql://localhost:8080/mydata"/>  



   此配置中有几个参数

name: 表示数据源的名称,也是要查找的名称

auth:表示由容器负责资源的连接

type:表示对象,数据源上每一个绑定的都是DataSource

maxActive: 表示最大连接数

minIdle:表示最小维持数量

maxWait:最大等待时间

对于连接的授权有两种: Container、Application(应用程序必须程序化的登录到资源管理器)


如果现在假设是oracle 数据库的话,则直接换启动程序即可

[html]  view plain copy print ?
  1. <Resource name="jdbc/orcl"  
  2. auth="Container"  
  3. type="javax.sql.DataSource"  
  4. maxActive="100"  
  5. maxIdle="30"  
  6. maxWait="10000"  
  7. username="scott"     
  8. password="tiger"  
  9. driverClassName="oracle.jdbc.driver.OracleDriver"  
  10. url="jdbc:oracle:thin:@localhost:1521:orcl"/>  
       但是现在使用tomcat 版本是6.0 ,所以要想让一个数据源起作用的话,还必须在web.xml 文件之中完成配置

<resource-ref>

    <res-ref-name>jdbc/mydata</res-ref-name>

    <res-type>javax.sql.DataSource</res-type>

   <res-auth>Container</res-auth>

</resource-ref>


查找数据源

   数据源的操作使用的是JNDI 方式进行查找的,所以如果要想使用数据源取得数据库连接的话,则必须按照如下的步骤进行

初始化名称查找上下文: Context ctx = new IntialContext();

通过名称查找DataSource 对象: DataSource ds = (DataSource)ctx.lookup(JNDI名称)

通过DataSource 取得一个数据库连接; Connection conn = ds.getConnection();

[html]  view plain copy print ?
  1. <HTML>  
  2.  <HEAD>  
  3.   <TITLE> New Document </TITLE>  
  4.   
  5.  <BODY>  
  6. <%  
  7.     String DSNAME = "jdbc/mydata";   //名称  
  8.     Context ctx = new InitialContext();  
  9.     DataSource ds = (DataSource) ctx.lookup(DSNAME);  
  10.     Connection conn = ds.getConnection();  //从连接池中取连接  
  11. %>  
  12. <%=conn%>  
  13. <%  
  14.     conn.close();  //表示将连接放回到池子中  
  15. %>  
  16.  </BODY>  
  17. </HTML>  

现在提示没有名称被发现

实际上对于这种资源的操作,本身是需要一个环境属性的支持的: java:comp/env, 但是Tomcat 服务器本身是免费,那么没有对这种属性提供支持,所以如果要想访问Tomcat中的名称服务的话,则肯定要在前面加上此属性,即,现在的名称是:java:comp/env/jdbc/mydata


以后程序中只认名字,而具体是哪个数据将由配置决定

当然: 如果现在使用的是DAO 开发的,DatabaseConnection.java类

[java]  view plain copy print ?
  1. package com.demo;  
  2. import java.sql.*;  
  3. import javax.sql.*;  
  4. import javax.naming.*;  
  5. public class DatabaseConnection {  
  6.     private static final String DSNAME = "java:comp/env/jdbc/mydat";  
  7.     private Connection conn;  
  8.     public DatabaseConnection() throws Exception{  
  9.         Context ctx = new InitialContext();  
  10.         DataSource ds = (DataSource) ctx.lookup(DSNAME);  
  11.         this.conn = ds.getConnection();  
  12.     }  
  13.     public Connection getConnection() {  
  14.         return this.conn;  
  15.     }  
  16.     public void close () throws Exception {  
  17.         if(this.conn != null) {  
  18.             try  
  19.             {  
  20.                 this.conn.close();  
  21.             }  
  22.             catch (Exception e)  
  23.             {  
  24.                 throw e;  
  25.             }  
  26.         }  
  27.     }  
  28. }  

可是有一点必须注意的是,现在得到数据库连接池是在Tomcat 上配置的,所以此程序在WEB下运行,而不能使用Application 程序运行

某一局部修改不影响其他变化


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值