帆软报表FineReport中数据连接的JDBC连接池属性问题.pdf_第1页
帆软报表FineReport中数据连接的JDBC连接池属性问题.pdf_第2页
帆软报表FineReport中数据连接的JDBC连接池属性问题.pdf_第3页
帆软报表FineReport中数据连接的JDBC连接池属性问题.pdf_第4页
帆软报表FineReport中数据连接的JDBC连接池属性问题.pdf_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

帆软报表 FineReport 中数据连接的 JDBC 连接池属性问题 连接池原理连接池原理 在帆软报表 FineReport 中 连接池主要由三部分组成 连接池的建立 连接池中连接 使用的治理 连接池的关闭 下面就着重讨论这三部分及连接池的配置问题 1 连接池原理 连接池技术的核心思想 是连接复用 通过建立一个数据库连接池以及一套连接使用 分配 治理策略 使得该连接池中的连接可以得到高效 安全的复用 避免了数据库连接频 繁建立 关闭的开销 另外 由于对 JDBC 中的原始连接进行了封装 从而方便了数据库应用对于连接的使用 特别是对于事务处理 提高了开发效率 也正是因为这个封装层的存在 隔离了应用的 本身的处理逻辑和具体数据库访问逻辑 使应用本身的复用成为可能 1 1 连接池的建立 应用程序中建立的连接池其实是一个静态的 所谓静态连接池是指连接池中的连接在系 统初始化时就已分配好 且不能随意关闭连接 Java 中提供了很多容器类可以方便的构建 连 接 池 如 Vector Stack Servlet Bean 等 通 过 读 取 连 接 属 性 文 件 Connections properties 与数据库实例建立连接 在系统初始化时 根据相应的配置创建 连接并放置在连接池中 以便需要使用时能从连接池中获取 这样就可以避免连接随意的建 立 关闭造成的开销 1 2 连接池的管理 连接池管理策略是连接池机制的核心 当连接池建立后 如何对连接池中的连接进行管 理 解决好连接池内连接的分配和释放 对系统的性能有很大的影响 连接的合理分配 释 放可提高连接的复用 降低了系统建立新连接的开销 同时也加速了用户的访问速度 下面 介绍连接池中连接的分配 释放策略 连接池的分配 释放策略对于有效复用连接非常重要 我们采用的方法是一个很有名的 设计模式 Reference Counting 引用记数 该模式在复用资源方面应用的非常广泛 把该方法运用到对于连接的分配释放上 为每一个数据库连接 保留一个引用记数 用来记 录该连接的使用者的个数 具体实现方法如下 当客户请求数据库连接时 首先查看连接池中是否有空闲连接 指当前没有分配出去的 连接 如果存在空闲连接 则把连接分配给客户并作相应处理 即标记该连接为正在使用 引用计数加 1 如果没有空闲连接 则查看当前所开的连接数是不是已经达到 maxConn 最大连接数 如果没达到就重新创建一个连接给请求的客户 如果达到就按设定的 maxWaitTime 最大等待时间 进行等待 如果等待 maxWaitTime 后仍没有空闲连接 就抛出无空闲连接的异常给用户 当客户释放数据库连接时 先判断该连接的引用次数是否超过了规定值 如果超过就删 除该连接 并判断当前连接池内总的连接数是否小于 minConn 最小连接数 若小于就 将连接池充满 如果没超过就将该连接标记为开放状态 可供再次复用 可以看出正是这套 策略保证了数据库连接的有效复用 避免频繁地建立 释放连接所带来的系统资源开销 1 3 连接池的关闭 当应用程序退出时 应关闭连接池 此时应把在连接池建立时向数据库申请的连接对象 统一归还给数据库 即关闭所有数据库连接 这与连接池的建立正好是一个相反过程 连接池分配一个连接后如定义一个数据集 点击预览 执行完对应的 sql 语句会将所占 用的连接归还连接池 2 连接池的配置 数据库连接池中到底要放置多少个连接 才能使系统的性能更佳 用 minConn 和 maxConn 来限制 minConn 是当应用启动的时候连接池所创建的连接数 假如过大启动将变慢 但是启 动后响应更快 假如过小启动加快 但是最初使用的用户将因为连接池中没有足够的连接不 可避免的延缓了执行速度 因此应该在开发的过程中设定较小 minConn 而在实际应用的 中设定较大 minConn maxConn 是连接池中的最大连接数 可以通过反复试验来确定此 饱和点 为此在连接池类 ConnectionPool 中加入两个方法 getActiveSize 和 getOpenSize ActiveSize 表示某一时间有多少连接正被使用 OpenSize 表示连接池中有多少连 接被打开 反映了连接池使用的峰值 将这两个值在日志信息中反应出来 minConn 的 值应该小于平均 ActiveSize 而 maxConn 的值应该在 activeSize 和 OpenSize 之间 连接池属性连接池属性 1 问题描述 FineReport 连接池属性 使用的是 DBCP 连接池 下面介绍其设置方法及其属性中各 参数的意义 如果访问模板时 报连接超时 等待状态 警告如下 1 警 告 Cannot get a connection pool error Timeout waiting for idle obje ct 2 at mons dbcp PoolingDataSource getConn ection PoolingDataSource java 114 3 at mons dbcp BasicDataSource getConnec tion BasicDataSource java 1044 4 at com fr data pool MemoryConnection create Unknown Source 5 at com fr data impl JDBCDatabaseConnection createConnection Unkno wn Source 则需要把相应连接数调大 2 设置方法 点击服务器 定义数据连接 如下图所示 点击连接池属性 弹出连接池属性编辑框 这里的信息都保存 在 FR HOME WebReport WEB INF resources datasource xml 文件下 3 参数说明 名称举例含义 初始化 连接数 initialSize 1 初始化线程数 开始自动建立一 个与数据库的连 接 最大活 动连接 数 maxActive 200 可以从对象池中 取出的对象最大 个数 为 0 表示 没有限制 最大空 闲连接 数 maxIdle 100 最大等待连接中 的数量 设为负 数则没有限制 对象池中对象 最大个数 最小空 闲连接 数 minIdle 2 对象池中对象最 小个数 最大等 待时间 毫秒 maxWait 1000 最大等待时间 单位为 ms 超出 时间会丢出错误 信息 SQL 验 证查询 validationQuery SQL 语句 验证连接是否成 功 SQL 和 SELECT 指令至 少要返回一行 获取连 接前检 验 testOnBorrow false 取得对象时是否 进行验证 检查 对象是否有效 默认为 false 归还连 接前检 验 testOnReturn true 返回对象时是否 进行验证 检查 对象是否有效 默认为 false 开启空 闲回收 器检验 testWhileIdle true 空闲时是否进行 验证 检查对象 是否有效 默认 为 false 空闲连 接回收 器休眠 时间 毫 秒 timeBetweenEvictionRunsMillis 1000 失效检查线程运 行时间间隔 如 果小于等于 0 不会启动检查线 程 空闲连 接回收 检查数 numTestsPerEvictionRun 2 失效检查线程运 行次数 保持空 闲最小 时间 minEvictableIdleTimeMillis 18005000 大于 0 进行连 接空闲时间判 断 或为 0 对 空闲的连接不进 行验证 最大活动连接数设置超过数据库中的连接数目 只能按照数据库中的连接数目为准 如 想调至最大 则也要调整数据库中的连接数目 参考文档连接池满问题中的解决方案 连接池满问题连接池满问题 1 问题描述 若日志报 ORA 12519 TNS no appropriate service handler found 是数据库连接失 败的错误 12519 错误是监听不能提供服务 2 原因 原因是我们定义数据连接后 点击连接时 此时会从用掉一个连接池中的一个连接 而 在定义数据集后 点击预览按钮 此时连接池就会分配连接 可能会使用之前那个连接 之 前的连接已释放 或分配一个其他的连接或新建一个连接 若此时连接池所有连接都已用 完 就会报如下错误 当客户请求数据库连接时 首先是查看连接池中是否有空闲连接 指当前没有分配出去 的连接 假如存在空闲连接 则把连接分配给用户 并作相应的处理 即标记该连接为正 在使用 引用计数加 1 假如没有空闲连接 则查看当前所开的连接数是不是已经达到 maxConn 最大连接数 若没达到就重新创建一个连接给请求的客户 若达到就按设定 的 maxWaitTime 最大等待时间 进行等待 若等待 maxWaitTime 后 仍没有空闲连接 就抛出无空闲连接的异常给用户 3 解决方案 若您在 FineReport 连接池属性的设置中 已将最大连接数设置得过大 还出现如上的 报错 此时通常就是数据库进程 processes 达到上限导致的 可增大数据库中的连接数 目来解决此问题 如下在数据库中修改最大连接数 Select count from v process 查看当前的连接数 Select value from v parameter where name processes 查看数据库允许的最大 连接数 Alter system set processes 300 sco

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论