• 连接池、数据源、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/    

  • 相关阅读:
    BBS登入和数据库迁移部分
    Auth组件
    【作业】返回一个整形数组中最大子数组地和——当维度达到二维/*待完善*/
    【作业】返回一个整形数组中最大子数组地和——当数量达到10亿
    软件工程课程周学习进度报告——第三周
    软件工程课程周学习进度报告——第二周
    软件工程第一周开课博客
    【作业】返回一个整形数组中最大子数组地和
    《人月神话》读后感其三——第二个系统问题
    《人月神话》读后感其二——从未考虑过的多人协作问题
  • 原文地址:https://www.cnblogs.com/stevehu1231/p/8566304.html
Copyright © 2020-2023  润新知