- 浏览: 188180 次
- 性别:
- 来自: 上海
文章分类
最新评论
JNDI( Java Naming and Directory Interface ),是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个 API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括 LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。可以把它理解为一种将对象和名字捆绑的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用.
类似于一个全局 map,key保存JNDI名字,value保存你放到里面的资源的引用,比如数据源啊什么的
运行机制:
1、 首先程序代码获取初始化的 JNDI 环境并且调用 Context.lookup() 方法从 JNDI 服务提供者那里获一个 DataSource 对象
2、 中间层 JNDI 服务提供者返回一个 DataSource 对象给当前的 Java 应用程序这个 DataSource 对象代表了中间层服务上现存的缓冲数据源
3、 应用程序调用 DataSource 对象的 getConnection() 方法
4、 当 DataSource 对象的 getConnection() 方法被调用时,中间层服务器将查询数据库 连接缓冲池中有没有 PooledConnection 接口的实例对象。这个 PooledConnection 对象将被用于与数据库建立物理上的数据库连接
5、 如果在缓冲池中命中了一个 PooledCoonection 对象那么连接缓冲池将简单地更 新内部的缓冲连接队列并将该 PooledConnection 对象返回。如果在缓冲池内没 有找到现成的 PooledConnection 对象,那么 ConnectionPoolDataSource 接口将会被 用来产生一个新的 PooledConnection 对象并将它返回以便应用程序使用
6。 中间层服务器调用 PooledConnection 对象的 getConnection() 方法以便返还一个 java.sql.Connection 对象给当前的 Java 应用程序
7、 当中间层服务器调用 PooledConnection 对象的 getConnection() 方法时, JDBC 数据 库驱动程序将会创建一个 Connection 对象并且把它返回中间层服务器
8、 中间层服务器将 Connection 对象返回给应用程序 Java 应用程序,可以认为这个 Connection 对象是一个普通的 JDBC Connection 对象使用它可以和数据库建立。事 实上的连接与数据库引擎产生交互操作 。
9、 当应用程序不需要使用 Connection 对象时,可以调用 Connection 接口的 close() 方 法。请注意这种情况下 close() 方法并没有关闭事实上的数据库连接,仅仅是释 放了被应用程序占用的数据库连接,并将它还给数据库连接缓冲池,数据库连接 缓冲池会自动将这个数据库连接交给请求队列中下一个的应用程序使用。
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1) 最小连接数
是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数
是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大,
那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
tomcat 下context.xml中
<Resource driverClassName="com.mysql.jdbc.Driver" maxActive="10"
maxIdle="2" maxWait="50" name="user" password="123456"
type="javax.sql.DataSource" url="jdbc:mysql://ip:dataBase?characterEncoding=utf-8"
username="root" />
同时你需要把你使用的数据驱动jar包放到Tomcat的lib目录下。
如果你使用其他数据源如DBCP数据源,需要在Resouce 标签多添加一个属性如
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
当然你也要把DBCP相关jar包放在tomcat的lib目录下,如果要直接用Tomcat提供的DBCP的Jar包,需要将factorhy的属性改为 "org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"。
配置c3p0 连接池
<Resource auth="Container" description="DB Connection" driverClass="com.mysql.jdbc.Driver" maxPoolSize="10" minPoolSize="2" acquireIncrement="2" name="jdbc/connPool" user="root" password="111111" factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource" jdbcUrl="jdbc:mysql://localhost:3306/haixu?autoReconnect=true" />
配置druid连接池
<Resource
name="jdbc/rsglxt"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="123456"
maxActive="100"
maxWait="10000"
url="jdbc:mysql://localhost:3306/rsgl"
/>
要将druidjar包放入lib中
c3p0 连接池:
C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现
jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。在使用时
需要导入c3p0-*.jar包。
DBCP连接池:
DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使
用DBCP需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar.
DBCP有着比C3P0更高的效率,但是实际应用中,DBCP可能出现丢失
连接的可能,而C3P0稳定性较高。因此在实际应用中,C3P0使用较为广泛。
阿里 druid 连接池:
Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。
JNDI
类似于一个全局 map,key保存JNDI名字,value保存你放到里面的资源的引用,比如数据源啊什么的
运行机制:
1、 首先程序代码获取初始化的 JNDI 环境并且调用 Context.lookup() 方法从 JNDI 服务提供者那里获一个 DataSource 对象
2、 中间层 JNDI 服务提供者返回一个 DataSource 对象给当前的 Java 应用程序这个 DataSource 对象代表了中间层服务上现存的缓冲数据源
3、 应用程序调用 DataSource 对象的 getConnection() 方法
4、 当 DataSource 对象的 getConnection() 方法被调用时,中间层服务器将查询数据库 连接缓冲池中有没有 PooledConnection 接口的实例对象。这个 PooledConnection 对象将被用于与数据库建立物理上的数据库连接
5、 如果在缓冲池中命中了一个 PooledCoonection 对象那么连接缓冲池将简单地更 新内部的缓冲连接队列并将该 PooledConnection 对象返回。如果在缓冲池内没 有找到现成的 PooledConnection 对象,那么 ConnectionPoolDataSource 接口将会被 用来产生一个新的 PooledConnection 对象并将它返回以便应用程序使用
6。 中间层服务器调用 PooledConnection 对象的 getConnection() 方法以便返还一个 java.sql.Connection 对象给当前的 Java 应用程序
7、 当中间层服务器调用 PooledConnection 对象的 getConnection() 方法时, JDBC 数据 库驱动程序将会创建一个 Connection 对象并且把它返回中间层服务器
8、 中间层服务器将 Connection 对象返回给应用程序 Java 应用程序,可以认为这个 Connection 对象是一个普通的 JDBC Connection 对象使用它可以和数据库建立。事 实上的连接与数据库引擎产生交互操作 。
9、 当应用程序不需要使用 Connection 对象时,可以调用 Connection 接口的 close() 方 法。请注意这种情况下 close() 方法并没有关闭事实上的数据库连接,仅仅是释 放了被应用程序占用的数据库连接,并将它还给数据库连接缓冲池,数据库连接 缓冲池会自动将这个数据库连接交给请求队列中下一个的应用程序使用。
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1) 最小连接数
是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数
是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大,
那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
tomcat 下context.xml中
<Resource driverClassName="com.mysql.jdbc.Driver" maxActive="10"
maxIdle="2" maxWait="50" name="user" password="123456"
type="javax.sql.DataSource" url="jdbc:mysql://ip:dataBase?characterEncoding=utf-8"
username="root" />
同时你需要把你使用的数据驱动jar包放到Tomcat的lib目录下。
如果你使用其他数据源如DBCP数据源,需要在Resouce 标签多添加一个属性如
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
当然你也要把DBCP相关jar包放在tomcat的lib目录下,如果要直接用Tomcat提供的DBCP的Jar包,需要将factorhy的属性改为 "org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"。
配置c3p0 连接池
<Resource auth="Container" description="DB Connection" driverClass="com.mysql.jdbc.Driver" maxPoolSize="10" minPoolSize="2" acquireIncrement="2" name="jdbc/connPool" user="root" password="111111" factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource" jdbcUrl="jdbc:mysql://localhost:3306/haixu?autoReconnect=true" />
配置druid连接池
<Resource
name="jdbc/rsglxt"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="123456"
maxActive="100"
maxWait="10000"
url="jdbc:mysql://localhost:3306/rsgl"
/>
要将druidjar包放入lib中
c3p0 连接池:
C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现
jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。在使用时
需要导入c3p0-*.jar包。
DBCP连接池:
DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使
用DBCP需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar.
DBCP有着比C3P0更高的效率,但是实际应用中,DBCP可能出现丢失
连接的可能,而C3P0稳定性较高。因此在实际应用中,C3P0使用较为广泛。
阿里 druid 连接池:
Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。
JNDI
发表评论
文章已被作者锁定,不允许评论。
-
oracle 查看执行计划的方式
2016-12-20 18:16 383一、通过PL/SQL Dev工具 1、直接File- ... -
pl/sql 乱码解决
2016-08-25 16:25 326select userenv('language') from ... -
使用MySQL Proxy解决MySQL主从同步延迟
2016-08-15 16:26 532使用MySQL Proxy解决MySQL主从同步延迟 ... -
分库分表
2016-07-03 12:30 533第1章 引言 随着互联网 ... -
select for update
2016-03-30 17:45 624xjr80C7HA3olbVr3y6H3t5--AcosrkB ... -
数据库超时
2016-03-07 10:37 462 -
oracle merge into
2016-03-04 16:16 422/*Merge into 详细介绍 MERGE语句是Oracl ... -
oracle 分区表
2016-03-02 14:59 426(1) 表空间及分区表的 ... -
一些注意的sql写法
2016-01-20 14:07 763Dashboard > 流程空间 > home ... -
oracle 组合索引使用
2016-01-14 20:33 892在Oracle中可以创建组合索引,即同时包含两个或两个以上列的 ... -
oracle 索引
2016-01-14 20:24 649一、 ROWID的概念 存储了row在数据文件中的具体位置: ... -
oracle 查看sql执行计划
2016-01-14 14:06 391如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划 ... -
oracle sql调优 执行计划固化 排序等 SQL Plan Baseline
2015-11-14 16:13 14191.对查询进行优化,应 ... -
oracle 字段类型 收录
2015-11-02 19:52 770字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符 ... -
oracle trunc 函数
2015-08-25 17:57 569Oracle trunc()函数的用法 --Oracle t ... -
oracle 分析函数
2015-08-03 12:49 607oracle分析函数--SQL*PLUS环 ... -
跨数据库事务研究
2015-05-12 11:16 868两种方案: 1、分布式 ... -
Oracle的悲观锁和乐观锁
2015-04-22 13:27 451为了得到最大的性能, ... -
MySQL数据库MyISAM和InnoDB存储引擎的比较
2015-04-21 13:49 487MySQL有多种存储引擎,MyISAM和InnoDB是其中常用 ... -
nosql学习
2015-04-20 09:56 5591、NoSQL数据库概念 NoSQL ...
相关推荐
为了配置JNDI连接池以连接到MySQL数据库,我们需要在Tomcat的`context.xml`或`server.xml`文件中添加必要的配置,包括数据源的JNDI名称、数据库URL、用户名、密码、驱动类名等。 例如,我们可以创建一个名为`...
本资源包含对JNDI数据库连接池的详细讲解,以及监听器的代码实例和讲解资料,旨在帮助开发者更好地理解和应用这些技术。JNDI主要通过以下步骤实现数据库连接的管理: 1. **配置JNDI数据源**:在应用服务器(如...
其次,Druid是阿里巴巴开源的数据库连接池实现,它不仅是一个连接池,还集成了监控、SQL解析、WebStatFilter等特性。Druid以其强大的监控能力、优秀的性能和全面的功能深受开发者喜爱。它提供了实时的监控界面,可以...
这里,`name`属性是我们将要在应用中使用的JNDI名称,`driverClassName`是数据库驱动类名,`url`是数据库连接地址,`username`和`password`是数据库认证信息,`maxActive`等属性控制连接池的行为。 然后,在你的Web...
### JNDI数据库连接池详解 #### 一、引言 在现代的Web应用程序开发中,数据库连接的高效管理对于提升应用性能至关重要。数据库连接作为一种关键且有限的资源,在多用户环境中尤其显得宝贵。不当的连接管理不仅可能...
Java数据库连接池是Java开发中一个非常重要的技术,它主要用于管理数据库连接,提高数据库操作...通过深入学习《最新修改java数据库连接池原理与应用(陈迁小组)》这份资料,你将对数据库连接池有更全面、深入的理解。
本文将深入探讨数据库连接池的原理、作用,以及如何在Java Web环境中,特别是结合Tomcat服务器和JSP进行配置和使用。 首先,我们需要理解什么是数据库连接池。数据库连接池是一种管理数据库连接的技术,它预先创建...
数据库连接池的基本工作原理是:当应用程序需要访问数据库时,首先从连接池中获取一个已经建立好的连接,使用完毕后,不是立即关闭连接,而是将其归还给连接池,以便其他请求再次使用。这样避免了频繁地打开和关闭...
连接池的基本原理是预先创建一定数量的数据库连接,并将它们保存在一个池中,当应用需要连接数据库时,不再直接建立新的连接,而是从池中获取一个已存在的连接;使用完毕后,连接不被关闭,而是归还给连接池,供其他...
数据库连接池是现代数据库应用程序中的重要组成部分,它有效地管理和优化了数据库连接的创建、分配和回收,...同时,为了保证数据库连接池的正常工作,还需要正确配置连接参数,如最大连接数、最小连接数、超时时间等。
本文将深入探讨数据库连接池的应用与研究,包括其原理、优点、常见实现以及如何在实际项目中有效地利用它。 首先,我们要理解数据库连接池的基本概念。数据库连接池是一种管理数据库连接的技术,它在应用程序启动时...
在分析数据库连接池工作原理的基础上,给出了Tomcat服务器数据库连接池的配置实例,以及在JSP页面中使用此连接池进行数据库访问的Java代码。在大型Web站点的开发中,使用数据库连接池技术是必要的,也是可取的。
下面将详细介绍这三种数据库连接池的实现原理和特性。 1. **DBCP (BasicDataSource)** DBCP 是 Apache Commons 项目的一部分,它基于 Jakarta-pool 实现。DBCP 提供了一个基础的数据源类 `BasicDataSource`,负责...
普元EOS开发平台默认数据源支持jndi、c3p0,但其性能较差,改用阿里巴巴Druid数据库连接池可以提高性能。下面是配置阿里Druid数据库连接池的步骤和说明: 1. 通过 governor,将数据源修改成 JNDI 数据源,保存即可...
1. **C3P0**:这是一个开源的JDBC连接池,提供了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。使用C3P0,你需要引入`c3p0.jar`和`com.mchange.v2.c3p0.jar`。 2. **DBCP (Apache Commons DBCP)**:Apache...
- Druid:阿里巴巴开源的数据库连接池,除了基本的连接池功能外,还提供了监控、日志、SQL解析等功能。 - Commons Pool:Apache的一个通用对象池库,可以用来创建任何可池化的对象,包括数据库连接。 3. **如何...
数据库连接池的基本原理是预先创建一定数量的数据库连接,当应用程序需要访问数据库时,可以从池中获取一个已建立的连接,使用完毕后归还给池而不是直接关闭,这样避免了频繁的创建和销毁连接带来的开销。...
`dbtest.sql`可能是用于测试数据库的SQL脚本,可能包括创建表、插入数据等操作,以便于开发者验证连接池和JdbcTemplate的配置是否正确。 总的来说,Java数据库连接池如C3P0和Druid,以及Spring的JdbcTemplate,都是...
在JSP中,我们通常使用诸如Apache DBCP、C3P0、HikariCP或Tomcat JDBC Connection Pool等流行的数据库连接池实现。这些库提供了一套完整的管理和维护数据库连接的机制,包括初始化池大小、最大连接数、超时设置、...
下面将详细介绍这三种数据库连接池的工作原理和特点。 1. C3P0 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的特点包括: - 连接池大小动态调整:可以根据应用...