BSS_QC_数据库连接和事务管理专题_第1页
BSS_QC_数据库连接和事务管理专题_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、1 / 13BSS 系统中数据库连接的安全使用和事务问题汇总V1.0.1修改日期原因修改人2007-09-30根据 zhaoxin 的意见,修改了Hibernate 的 session 连接管理刘世伟2007-11-8根据调优组当前的工作,补充了一 些内容刘世伟几个名词解释:1、数据库连接池:众所周知,建立数据库连接是一个昂贵的操作,每次都得花费约0.05S1s的时间,消耗一定的内存资源(Oracle 9i的一个空闲连接约需25MB内存,非空闲连接约需几十MB左右内存),而且一旦到达 临界点,系统会陷入资源管理的恶性循环:越来越慢。数 据库连接池的基本思想就是为数据库连接建立一个“缓冲 池”。

2、预先在缓冲池中放入一定数量的连接备用,减少使 用时才创建、销毁的消耗。当需要建立数据库连接时,只 需从“缓冲池”中取出一个,使用完毕之后再放回去。使 用连接池后,数据库服务器减少了它并不擅长的连接管理 工作,通过池连接的快速复用,可以为客户端提供更大的 并发量,内存消耗也在可控范围内波动。我们可以通过设 定连接池最大连接数来防止系统无尽的与数据库连接,控 制数据库的压力。我们也可以通过连接池的管理机制监控 数据库连接的数量、使用情况,为系统开发、测试及性能 调优提供依据。2 / 132、真实连接:客户端程序直接和数据库建立的Connection,使用完毕需要及时、安全的关闭,否则会导 致数据库

3、内存资源泄漏、服务器宕机3、代理连接:客户端程序从连接池获取的Connection,它实际上是封装了真实连接,提供和真实连 接相同的功能,使用完毕也需要及时、安全的关闭,否则 连接池中的连接得不到释放,会导致连接池中可用的空闲 连接越来越少。当然,由于存在连接池的控制,数据库不 会因此而宕机。3 / 13ery:查询前 验证连接testOnBorrow:获取前测试 连接一、BSS数据库连接管理现状:BSS系统中对数据库连接的管理,是统一通过数据源(DataSource)管理的,存在连接池和单连接两种方式的数据源(详情参考modelxxx.jar中的xxxDatabase.xml文件)1、连接池

4、数据源,命名方式为“xxxDataSource”,BSS采用了apache的开源池以下方法获取的都 是代理连接:1、Hiber nate.getSession ();2、JdbcTemplate.getDataSource().getC onn ecti on();以下方法获取的都 是真实的连接:1、Hiber nate.getSession() .c onn ecti on();2、JdbcTemplate.getDataSource().getC onn ection( ).getDelega te();1应用程序(JSP、Servlet、EJB、Java App 等)1_客户端通过连接池

5、使用数据库连接,创建和关闭连接其实对从连接池中获取和归还已经创建好的数据库连接。特殊情况下,客户端也需要通过连接池,使用真实的数据库连接。连接池配置的 参数:MaxActive: 最大连接数MaxIdel:最大空闲连接数Minldel:最小 空闲连接数I Initialsize:初 始化连接数MaxWait:最 大等待时间validationQu由连接池管理(创建、更新、关闭)数 据库的真实连 接,一般提供 初始化、池管 理、池销毁、 获取、关闭连 接功能交易请求ATClie ntI真实连接Oracle DB主机4 / mons.dbcp.BasicDataSource,应用程序获取的是apa

6、che连接池的代理连接(connectionProxy),非真 实连接。2、单连接数据源,命名方式为“xxxDataSourceNoPool”,BSS采用了Spring框架的org.springframework.jdbc.datasource.DriverManagerDat aSource,程序获取的是真实的数据库连接。二、BSS系统中对数据源的使用1、Hibernate的SessionFactory,使用的是连接池数 据源,在配置文件中一般命名为“xxxSessionFactory”,而 且Hibernate本身包含一个简单的连接池hibernate.connection,但性能和功能不

7、如apache的。2、Spring的JdbcTemplate,根据其使用数据源是否为 连接池,命名方式也不同,配置文件中对使用连接池数据源 的命名为“xxxJDBC,使用单连接数据源的命名为“xxxJDBCNoPool三、 应用程序中对连接的使用BSS程序中使用Hibernate的session和JdbcTemplate提供的通用方法一般是够用的,但某些场景下如执行oracle特性 的SQL5 / 13语句或存储过程,需要获取真实数据库连接, 现在主要使 用以下几种方式:1、Hibernate中,通过getSession().connection(),此时获取的是连接是根据其 数据源决定的,如果通过连接池中获取,则是代理连接, 否则是真实数据库连接,但注意,无论如何都不能用conn.close()语句显示关闭的;这时候的conn其实是被session管理了,Hibernate会在Session的事务提交或回 滚的时候,自动把连接放回池中,如果我们主动关了,会 抛异常。2、JdbcTemplate中,通过jdbc.getDataSource().getConnection(),此时获取的连 接是根据其数据源决定的,如果jdbc.getDa

温馨提示

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

评论

0/150

提交评论