`

C3P0参数的使用(2)

    博客分类:
  • Java
阅读更多
配置连接测试
C3P0能配置测试连接。一些连接由于不同的原因会变坏——一些JDBC驱动故意地“超时”长久地连接数据库;后台数据库或者网络有时处理能力下降;连接由于资源泄漏,驱动的BUG或者另外的原因被破坏。
C3P0在连接测试方面提供给用户了很大的灵活性。
idleConnrctionTestPeriod,testConnectionOnCheckout,以及testConnectionOnCheckin控制什么时候连接将会是被测试。automaticTestTable,connectionTesterClassName和preferredTestQuery 控制它们怎样被测试。
当配置连接测试的时候,首先尝试最小化每个测试的花销。默认情况下,通过调用与连接相关的DatabaseMetaData对象上的getTables()方法,测试连接。这有兼容数据库的优势,并且不需要关注数据库的Schema。然而,DatabaseMetaData.getTables()调用比简单的数据库查询是慢的。
加快连接测试的最便捷方式是定义参数automaticTestTable。使用你提供的名字,C3P0将会创建一个空表,并且创建简单的查询去测试数据库。另外,如果你的数据库Schema先于你应用的数据库确定,你可以使用preferredTestQuery参数定义一个测试查询。小心点。当连接测试失败时,如果查询目标表在你的数据库表中不存在的话设置preferedTestQuery将会导致错误。
高级用户也许定义了他们希望的任意种类的连接,通过实现连接ConnectionTester,并且提供类的全限定名作为connectionTesterClassName。如果你想要自定义ConnectionTesters支持preferredTestQuery和automaticTestTable参数,实现UnifiedConnectionTester,最方便的方法是扩展AbstractConnectionTester。
测试连接最可靠的时间是在check-out。但是从客户端性能考虑的话,这也是代价最大的选择。大部分应用应该使用idleConnectionTestPeriod和testConnectionsOnCheckIn的结合。idle和check-in的测试都是异步执行地,这将导致更好的性能,都是可感知的和真实的。
注意:对于选多的应用,高性能是比偶然的数据库异常更重要的。在默认的配置中,C3P0根本不做连接测试。设置相当长的idleConnectionTestPeriod,并且不要在checkout和check-in时测试是好的,高性能的方法。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics