电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

BSS_QC_数据库连接和事务管理专题VIP免费

BSS_QC_数据库连接和事务管理专题_第1页
1/7
BSS_QC_数据库连接和事务管理专题_第2页
2/7
BSS_QC_数据库连接和事务管理专题_第3页
3/7
BSS系统中数据库连接的安全使用和事务问题汇总V1.0.1修改日期原因修改人2007-09-30根据zhaoxin的意见,修改了Hibernate的session连接管理刘世伟2007-11-8根据调优组当前的工作,补充了一些内容刘世伟几个名词解释:1、数据库连接池:众所周知,建立数据库连接是一个昂贵的操作,每次都得花费约0.05s~1s的时间,消耗一定的内存资源(Oracle9i的一个空闲连接约需2~5MB内存,非空闲连接约需几十MB左右内存),而且一旦到达临界点,系统会陷入资源管理的恶性循环:越来越慢。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接备用,减少使用时才创建、销毁的消耗。当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。使用连接池后,数据库服务器减少了它并不擅长的连接管理工作,通过池连接的快速复用,可以为客户端提供更大的并发量,内存消耗也在可控范围内波动。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接,控制数据库的压力。我们也可以通过连接池的管理机制监控数据库连接的数量﹑使用情况,为系统开发﹑测试及性能调优提供依据。2、真实连接:客户端程序直接和数据库建立的Connection,使用完毕需要及时、安全的关闭,否则会导致数据库内存资源泄漏、服务器宕机3、代理连接:客户端程序从连接池获取的Connection,它实际上是封装了真实连接,提供和真实连接相同的功能,使用完毕也需要及时、安全的关闭,否则连接池中的连接得不到释放,会导致连接池中可用的空闲连接越来越少。当然,由于存在连接池的控制,数据库不会因此而宕机。一、BSS数据库连接管理现状:BSS系统中对数据库连接的管理,是统一通过数据源(DataSource)管理的,存在连接池和单连接两种方式的数据源(详情参考modelxxx.jar中的xxxDatabase.xml文件)1、连接池数据源,命名方式为“xxxDataSource”,BSS采用了apache的开源池org.apache.commons.dbcp.BasicDataSource,应用程序获取的是apache连接池的代理连接(connectionProxy),非真实连接。2、单连接数据源,命名方式为“xxxDataSourceNoPool”,BSS采用了Spring框架的org.springframework.jdbc.datasource.DriverManagerDataSource,程序获取的是真实的数据库连接。二、BSS系统中对数据源的使用1、Hibernate的SessionFactory,使用的是连接池数据源,在配置文件中一般命名为“xxxSessionFactory”,而且Hibernate本身包含一个简单的连接池hibernate.connection,但性能和功能不如apache的。2、Spring的JdbcTemplate,根据其使用数据源是否为连接池,命名方式也不同,配置文件中对使用连接池数据源的命名为“xxxJDBC”,使用单连接数据源的命名为“xxxJDBCNoPool”三、应用程序中对连接的使用BSS程序中使用Hibernate的session和JdbcTemplate提供的通用方法一般是够用的,但某些场景下如执行oracle特性的SQL语句或存储过程,需要获取真实数据库连接,现在主要使用以下几种方式:1、Hibernate中,通过getSession().connection(),此时获取的是连接是根据其数据源决定的,如果通过连接池中获取,则是代理连接,否则是真实数据库连接,但注意,无论如何都不能用conn.close()语句显示关闭的;这时候的conn其实是被session管理了,Hibernate会在Session的事务提交或回滚的时候,自动把连接放回池中,如果我们主动关了,会抛异常。2、JdbcTemplate中,通过jdbc.getDataSource().getConnection(),此时获取的连接是根据其数据源决定的,如果jdbc.getDataSource()返回的是连接池数据源,则连接是连接池的连接代理(重载了真实连接的close方法),需要从代理连接中再次获取真实连接,见下面的a段落;如果返回的是单连接的数据源,则返回的是真实连接。这2种连接都需要显式的close关闭,前者表示把连接还回连接池继续使用,后者表示真正关闭连接,释放数据库内存。a)对JdbcTemplate中返回代理连接的情况,由于是连接代理,对Oracle的Blob和Clob大数据对象,在CLOB.createTemporary(conn,true,CLOB.DURATION_SESSION)的时候,会抛ClassCastException,此时需要获取真实的物...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

BSS_QC_数据库连接和事务管理专题

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部