Tomcat数据源配置

本文详细介绍了如何在 Tomcat 中配置数据源以减少数据库连接的开销,并提供了两种配置方案的具体步骤。此外,还给出了如何通过 JNDI 技术获取配置好的数据源对象并建立数据库连接的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tomcat数据源配置:
  为了解决不必要的资源浪费,使用数据源来减少打开和关闭数据库的连接
  1.工作原理: 
                                            ConnectionPool
             lookup      |DataSource-------->Connection       JDBC Driver
    External------------>|DataSource-------->Connection-------------------->DataBase
    Clients  Data Source |DataSource-------->Connection
                         |
                     JNDI Tree
    (1)通过ConnetionPool管理数据库连接
    (2)通过DataSource去管理Connection Pool
    (3)DataSource被JNDI绑定
             获得连接
    应用程序----------连接池---数据库

  2.配置步骤:
    (1)将数据库驱动程序拷贝到Tomcat的lib目录下.
    方案1:
     (1)
     在Tomcat6.0解压目录conf下找到context.xml,在其中的<Context></Context> 中加入如下代码:
     <Resource name="jdbc/myznt"  auth="Container" type="javax.sql.DataSource" password="1234"
     username="root"  driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost/news"  maxActive="100"  maxIdle="30"  maxWait="5000"/>
     (2)
     在工程应用中/WEB-INF/下的web.xml中加入如下代码(要根据自己的情况稍加修改):
   <resource-ref>
    <description>MySQL DataSource</description>
     <res-ref-name>jdbc/myznt</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
   </resource-ref>
  
   方案2:
     (1)
     在Tomcat6.0解压目录conf下找到server.xml,在其中的<GlobalNamingResources></GlobalNamingResources>中加入如下代码(要根据自己的情况稍加修改):
     <Resource name="jdbc/myznt"  auth="Container" type="javax.sql.DataSource" password="localhost" username="root"
     driverClassName="org.gjt.mm.mysql.Driver"  url="jdbc:mysql://localhost/myznt"  maxActive="100"  maxIdle="30"  maxWait="5000"/>
     (2)
     在Tomcat6.0解压目录conf下找到context.xml,在其中的<Context></Context>中加入并修改成如下代码(要根据自己的情况稍加修改):
     <Context path="/znt" debug="1" reloadable="true"  docBase="E:/EclipseWorkPlace/MyZNT/WebRoot">
     <ResourceLink global="jdbc/myznt" name="jdbc/myznt" type="javax.sql.Datasource"/>
     ................<!--此间可能有系统其它自配的内容,可不管-->
     </Context>
    (3)
     在工程中/WEB-INF/下的web.xml中加入如下代码(要根据自己的情况稍加修改):
      <resource-ref>
        <description>MySQL DataSource</description>
        <res-ref-name>jdbc/myznt</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>

  3.测试配置:
    <%@page import="java.sql.*"%>
    <%@page import="javax.sql.*"%>
    <%@page import="javax.naming.*"%>
    <%!
       final String JNDINAME = "java:comp/env/jdbc/mldn"; //在查找时需要对名称进行定位:java:comp/env
    %>
    <%
       Connection conn = null;
       try
       {
           //初始化命名空间
    Context ctx = new InitialContext();
    //找到DataSource
    DataSource ds = (DataSource)ctx.lookup(JNDINAME);
    conn = ds.getConnection();
       }
       catch(Exception e)
       {
          System.out.print(e);
       }
    %>
    <%=conn%>
    <%
       //将连接重新放回到池中
       conn.close();
    %>

4.javax.sql与javax.naming包
 
  javax.sql中的DataSource接口:
  Connection getConnection() 尝试建立与此 DataSource 对象表示的数据源的连接。
  javax.naming.Context接口:
  需初始化命名空间
  Object lookup(String name) 检索指定的对象
 
  JNDI技术:
  将DataSource对象与名字绑定的技术.容器将产生DataSource对象,
  其都和唯一的名字绑定,外部名字可以通过名字来获得该对象.
  javax.naming.Context提供了查找JNDI Resource的接口
  java:comp/env/是对名称进行定位的
  Context ctx = new InitialContext();
  DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mldn");
  Connetion conn = ds.getConnection();
 
  总结:
       1.配置好数据源
       2.javax.naming.Context接口查找配置好的数据源名称,
         查找时首先new InitialContext()初始化Context对象,
  并将名称直接转换成DataSource对象
       3.利用javax.sql.DataSource接口对象
        (也就是转换过来的datasource对象)的getConnection()方法取得连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值