{品质管理Q七大手法}BSSQ数据库连接和事务管理专题.pdfVIP

  • 6
  • 0
  • 约9.51千字
  • 约 20页
  • 2020-09-01 发布于黑龙江
  • 举报

{品质管理Q七大手法}BSSQ数据库连接和事务管理专题.pdf

{品质管理 Q 七大手 法}BSSQ 数据库连接和事 务管理专题 1 、 代理连接:客户端程序从连接池获取的Connection ,它实际上是 封装了真实连接,提供和真实连接相同的功能,使用完毕也需要 及时、安全的关闭,否则连接池中的连接得不到释放,会导致连 接池中可用的空闲连接越来越少。当然,由于存在连接池的控制, 数据库不会因此而宕机。 一、BSS 数据库连接管理现状: BSS 系统中对数据库连接的管理,是统一通过数据源(DataSource ) 管理的,存在连接池和单连接两种方式的数据源(详情参考中的文件) 1、 连接池数据源,命名方式为“xxxDataSource”,BSS 采用了 apache 的开源池..BasicDataSource ,应用程序获取的是apache 连接池的代 理连接(connectionProxy),非真实连接。 2、 单连接数据源,命名方式为 “xxxDataSourceNoPool”,BSS 采用 了Spring 框架的..DriverManagerDataSource ,程序获取的是真实的 数据库连接。 二、BSS 系统中对数据源的使用 1、 Hibernate 的SessionFactory ,使用的是连接池数据源,在配置 文件中一般命名为“xxxSessionFactory”,而且 Hibernate 本身包 含一个简单的连接池,但性能和功能不如 apache 的。 2、 Spring 的JdbcTemplate,根据其使用数据源是否为连接池,命名 方式也不同,配置文件中对使用连接池数据源的命名为 “xxxJDBC”, 使用单连接数据源的命名为“xxxJDBCNoPool” 三、应用程序中对连接的使用 BSS 程序中使用 Hibernate 的 session 和 JdbcTemplate 提供的通用 方法一般是够用的,但某些场景下如执行 oracle 特性的 SQL 语句或存储 过程,需要获取真实数据库连接,现在主要使用以下几种方式: 1 、 Hibernate 中,通过getSession().connection() ,此时获取的是 连接是根据其数据源决定的,如果通过连接池中获取,则是代理 连接,否则是真实数据库连接,但注意,无论如何都不能用()语 句显示关闭的;这时候的conn 其实是被 session 管理了, Hibernate 会在 Session 的事务提交或回滚的时候,自动把连接放 回池中,如果我们主动关了,会抛异常。 2 、 JdbcTemplate 中,通过().getConnection() ,此时获取的连接是 根据其数据源决定的,如果()返回的是连接池数据源,则连接是 连接池的连接代理(重载了真实连接的 close 方法),需要从代 理连接中再次获取真实连接,见下面的 a 段落;如果返回的是单 连接的数据源,则返回的是真实连接。这 2 种连接都需要显式的 close 关闭,前者表示把连接还回连接池继续使用,后者表示真正 关闭连接,释放数据库内存。 a) 对 JdbcTemplate 中返回代理连接的情况,由于是连接代理,对 Oracle 的Blob 和 Clob 大数据对象,在(conn,true,_SESSION)的 时候,会抛ClassCastException ,此时需要获取真实的物理连接, 方法如下: i. 设置 DataSource 中连接池的 accessToUnderlyingConnectionAllowed 属性的值为 true ,表示允许 从连接代理中获取物理连接; ii. 对 apache 的BasicDataSource ,可通过..DelegatingConnection 的 getDelegate()方法获取真实连接。 iii. 注意,通过连接池代理连接而获取的真实连接一定不能直接关闭,否 则连接池就没有意义了 ,最好把这种情况下的获取物理连接+创

文档评论(0)

1亿VIP精品文档

相关文档