连接池、数据源、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-x64\apache-tomcat-7.0.68\conf\context.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/

原文地址:https://www.cnblogs.com/stevehu1231/p/8566304.html

时间: 2024-08-01 07:24:38

连接池、数据源、JNDI三者间的关系及用法的相关文章

JDK与JRE、JVM三者间的关系及JDK的安装部署

一.JDK与JRE.JVM三者间的关系 JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE.Java工具和Java基础类库.Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库.JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序. JDK是J

JDK、JRE、JVM三者间的关系

JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE.Java工具和Java基础类库.Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库.JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序. 在计算机开发语言的历史中,从来没有哪种语言象Jav

区分.net、c#、asp.net三者间的关系

1..net(dot net) .net是一个平台,抽象的平台概念. 实现形式是库:①定义了基本的类型(通用类型系统CTS,common type system).   ②包含.net公共语言运行库(CLK,common language runtime,负责管理用.net库开发的所有应用程序的运行). 核心是.net framework NET Framework包括两个关键组成元素: a.Common Language Runtime,公共语言运行时(CLR)-提供内在管理,代码安全性检测等

Java学习入门--(1)JDK、JRE、JVM三者间的关系

学习JAVA前必须了解Java跨平台特性,Java 为什么能跨平台,实现一次编写,多处运行?Java 能够跨平台运行的核心在于 JVM(Java虚拟机) .不是 Java 能够跨平台,而是它的 jvm 能够跨平台运行.我们知道,不同的操作系统向上的 API 肯定是不同的,那么如果我们想要写一段代码调用系统的声音设备,就需要针对不同系统的 API 写出不同的代码来完成动作. 而 Java 引入了字节码的概念,jvm 只能认识字节码,并将它们解释到系统的 API 调用.针对不同的系统有不同的 jvm

关于Rigidbody,Collider和CharacterController三者之间的关系和用法的总结

Rigidbody:多用在"物体"上,因为"物体"都是"死"的,他们的运动一般都是靠物理系统.所以对于Rigidbody的移动,不要用Translate(),要用各种"力", 比如:Rigidbody的AddForce()方法,通过"力"来让它移动.另外,Rigidbody可以和NavMeshObstacle合用,因为后者也是用在"物"上的,但是一般不要和NavMeshAgent合用,因

Python中read()、readline()和readlines()三者间的区别和用法

----------------------------------------------------------------------------------------------------- read() read(size)方法从文件当前位置起(那么在编写程序中注意光标的位置!)读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象 readline() 从字面意思可以看出,该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字

《java数据源—连接池》

<java数据源-连接池>1.数据源的分类:直接数据源.连接池数据源.2.连接池.数据源.JNDI a.数据源:Java中的数据源就是连接到数据库的一条路径,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接. b.连接池:简单的说就是保存所有的数据库连接的地方,在系统初始化时,将数据库连接对象存储到内存里,当用户需要访问数据库的时候,并不是建立一个新的连接,而是从连接池中 取出一个已经建立好的空闲连接对象.而连接池负责分配.管理.释放数据库连接对象.注意的是:连接池是由容

JDBC连接池技术

一.连接池技术 (1)Java语言通过JDBC技术访问数据库的基本过程是: 1.加载数据库驱动程序: 2.通过JDBC建立数据库连接: 3.访问数据库,执行SQL语句: 4.断开数据库连接. (2)在Web应用程序开发中,使用这种模式访问数据库时,存在很多问题,为了解决这些问题,可以采用数据库连接池技术. 连接池实际上是在一个集合对象中存储一定数量的数据库连接对象.当程序需要使用数据库连接时,请求从池中获取一个空闲的连接, 程序使用完毕后再把连接放回池中重用.连接池通过重用连接的方法,减少了创建

DBCP连接池的使用

通过连接池(数据源)优化我们的操作. 需求: 使用jdbc的时候,没操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作. 技术分析: 连接池 连接池概述: 管理数据库的连接, 作用: 提高项目的性能. 就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可. 所有的连接池必须实现一个接口 javax.sql.DataSource接口 获取连接方法: Connection getConnection() 归还连接的方法就是以