zoukankan      html  css  js  c++  java
  • 连接池、数据源、JNDI三者间的关系及用法

    连接池:
    连接池是由容器(比如Tomcat)提供的,用来管理池中的连接对象。
    连接池自动分配连接对象并对闲置的连接进行回收。
    连接池中的连接对象是由数据源(DataSource)创建的。
    连接池(Connection Pool)用来管理连接(Connection)对象。

    数据源:
    数据源(DataSource)用来连接数据库,创建连接(Connection)对象。
     java.sql.DataSource接口负责建立与数据库的连接
     由Tomcat提供,将连接保存在连接池中。


    JNDI(Java Naming and Directory Interface,Java命名和目录接口):
    在程序中使用JNDI获取数据源。


    通过数据源创建的连接对象被统一的放入到连接池中进行管理。


    搞清楚三者的关系,然后进行下面的配置 : )

    连接池的配置:

    C3P0连接池在Spring的配置文件application.xml的配置:

    <!-- 配置C3P0连接池: -->
     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
      <property name="driverClass" value="${jdbc.driver}"/>
      <property name="jdbcUrl" value="${jdbc.url}"/>
      <property name="user" value="${jdbc.user}"/>
      <property name="password" value="${jdbc.password}"/>
     </bean>


    数据源的配置与使用数据源的方法:

    1、配置Tomcat的conf/context.xml
     <Resource name="jdbc/news"
                  auth="Container"  type="javax.sql.DataSource"  maxActive="100"
                  maxIdle="30" maxWait="10000" username="root"  password="Admin"
                  driverClassName="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://127.0.0.1:3306/news"/>
      name=指定Resource的JNDI名称
      auth=指定管理Resource的Manager(Container由容器创建和管理,Application由Web应用创建和管理)
      type=指定Resource的java类
      maxActive=指定连接池中处于活动状态的数据库连接的最大数量
      maxIdle=指定连接池中处于空闲状态的数据库的最大数量
      maxWait=指定连接池中连接处于空闲的最长时间,超过这个时间会提示异常,取值为-1,表示可以无限期等待,单位为毫秒(ms)
     这里不要忘记:还需要将数据库的驱动jar包添加到,Tomcat安装目录下的lib文件夹中。

    2、使用JNDI获取连接对象
     lookup(java:comp/env/数据源名称");
     //java:comp/env/这是Java的语法要求,必须写上。
     //这里的数据源名称就是上面的jdbc/news,这个news是项目名。
     

    3.编写代码获取数据源

      // 获取数据库连接
      public Connection getConnection2() {
       try {
        //初始化上下文
        Context cxt=new InitialContext();
        //获取与逻辑名相关联的数据源对象
        DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/news");
        conn=ds.getConnection();
       } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
       return conn;
      }

    还有一点要注意:测试连接是否成功,需要在jsp页面输出connection,而不是在java类中Run As,应为数据源配置在Tomcat中需要把Web项目放入Tomcat容器中运行。jsp页面代码如下:

    示例:

    <%
     BaseDao baseDao=new BaseDao();
     Connection connection=baseDao.getConnection2();

     %>

    <%=connection %>

     在Tomcat中的配置

    配置在:context.xml文件内


    F:apache-tomcat-7.0.68-windows-x64apache-tomcat-7.0.68confcontext.xml


    ---------mySQL
    <Resource name="jdbc/news"
    auth="Container" type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="30" maxWait="10000" username="root"
    password="Admin001"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/news"/>


    ----------Oracle
    <Resource name="jdbc/orcl"
    auth="Container" type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="30" maxWait="10000" username="wuyong"
    password="Admin001"
    driverClassName="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:@localhost:1521:orcl"/>


    使用JNDI获取连接对象
    java:comp/env/jdbc/news

    这段为固定写法
    java:comp/env/    

  • 相关阅读:
    Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题
    Mysql中游标的使用
    xcode5下cocos2dx横竖屏设置
    VUE 小点 1
    绝对定位居中
    清楚float的方法4种
    socket模拟简单的服务器
    Django + Uwsgi + Nginx 的生产环境部署
    常见排序算法
    mro之C3算法
  • 原文地址:https://www.cnblogs.com/fifiyong/p/6026230.html
Copyright © 2011-2022 走看看