数据库连接池深入详解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
maxActive="100" maxIdle="30" maxWait="10000"
username="scott" password="tiger"
driverClassName="oracle.jdbc.OracleDriver"
连接数量
url="jdbc:oracle:thin:@localhost:1521:news"/>
及等待时间
数据库 相关信息
第4页/共38页 4
参数详解
defaultAutoCommit: 对于事务是否 autoCommit, 默认值为 true defaultReadOnly: 对于数据库是否只能读取, 默认值为 false driverClassName:连接数据库所用的 JDBC Driver Class, maxActive: 可以从对象池中取出的对象最大个数,为0则表示没有限制,
//获取与逻辑名相关联的数据源对象
DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/news");
conn=ds.getConnection();
java:comp/env为JavaEE默认路径 jdbc/news为DataSource的名称
<Resource name="jdbc/orcl2" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="scott" password="tiger" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:orcl"/>
对空闲的连接不进行验证;默认30分钟 timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,如果小
于等于0,不会启动检查线程,默认-1 testOnBorrow:取得对象时是否进行验证,检查对象是否有效,默认为
false testOnReturn:返回对象时是否进行验证,检查对象是否有效,默认为
testOnBorrow、testOnReturn、testWhileIdle 最好都设为true
讲解:数据源的读取
JNDI读取数据源
JNDI是Java命名与目录接口 通过名称与对象的绑定实现资源获取
//初始化上下文 Context cxt=new InitialContext();
通过Context接口的 lookup()查找数据源
数据库连接池深入详解
数据库连接池
数据库连接是一种关键的有限的昂贵的资源,这一 点在多用户的网页应用程序中体现得尤为突出。 对数据库连接的管理能显著影响到整个应用程序 的伸缩性和健壮性,影响到程序的性能指标。数 据库连接池正是针对这个问题提出来的。数据库 连接池负责分配、管理和释放数据库连接,它允 许应用程序重复使用一个现有的数据库连接,而 再不是重新建立一个;释放空闲时间超过最大空 闲时间的数据库连接来避免因为没有释放数据库 连接而引起的数据库连接遗漏。这项技术能明显 提高对数据库操作的性能。
演示示例:数据源的配置与读取 第9页/共38页
9
注意事项: 测试数据源,不能在main方法中测试,否则, 会报错。
数据库连接池中的数据库连接是由Servlet容 器自己管理的,不需要我们自己去管理数据 库连接对象。 这里在使用完数据库连接对象后调用数据库 连接对象的close()方法,并不是真正关闭数 据库连接对象,而是把它返回到数据库连接 池中,以等待其他用户的调用。
参数详解
validationQuery: 验证连接是否成功, SQL SELECT 指令至少要返回一行 removeAbandoned: 是否自我中断, 默认是 false removeAbandonedTimeout: 几秒后会自我中断, removeAbandoned 必
须为 true logAbandoned: 是否记录中断事件, 默认为 false minEvictableIdleTimeMillis:大于0 ,进行连接空闲时间判断,或为0,
JNDI
JNDI( Java Naming and Directory Interface ),是Java平台的一个标准扩展, 提供了一组接口、类和关于命名空间的概 念。如同其它很多Java技术一样,JDNI是 provider-based的技术,暴露了一个 API和 一个服务供应接口(SPI)。这意味着任何 基于名字的技术都能通过JNDI而提供服务, 只要JNDI支持这项技术。
false testWhileIdle:空闲时是否进行验证,检查对象是否有效,默认为false
注意事项:ຫໍສະໝຸດ Baidu
在使用DBCP的时候,如果使用默认值,则数 据库连接因为某种原因断掉后,再从连接 池中取得连接又不进行验证,这时取得的 连接实际上就会是无效的数据库连接。
鉴于上述情况,我们经常好做如下设置: validationQuery: SELECT COUNT(*) FROM DUAL
讲解:数据源的配置
在Tomcat中配置数据源
导入数据库文件ojdbc14.jar 配置conf/context.xml文件
数据源名称
指定管理者及 数据源的类型
<Resource name="jdbc/news"
auth="Container" type="javax.sql.DataSource"
数据库连接池中的数据库连接对象如果正在 被一个用户使用,那么另一个用户就不能 再使用该数据库连接对象了,除非它又被
放入到数据库连接池中被闲置起来。
局部数据源开发步骤
在META-INF下面创建context.xml文件。 <?xml version="1.0" encoding="UTF-8"?> <Context>
默认为8 maxIdle: 最大等待连接中的数量,设 0 为没有限制(对象池中对象最大个
数) minIdle:对象池中对象最小个数 maxWait: 最大等待秒数, 单位为 ms, 超过时间会丟出错误信息 password: 登陆数据库所用的密码 url: 连接数据库的 URL username: 登陆数据库所用的帐号