当前位置:网站首页 > SQL数据库编程 > 正文

druid数据库连接池中断重连(druid连接池 mysql120s断开)



  • c3p0:一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现JDBC3和JDBC2扩展规范说明的Connection 和Statement 池的DataSources 对象。
  • Proxool:一个Java SQL Driver驱动程序,提供了对选择的其他类型的驱动程序的连接池封装。可以非常简单地移植到现存的代码中,完全可配置,快速、成熟、健壮。可以透明地为现存的JDBC驱动程序增加连接池功能。
  • Jakarta DBCP:DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池。DBCP可以直接在应用程序中使用。这就是Tomcat DBCP连接池,Tomcat默认使用的就是该连接池。
    DDConnectionBroker:一个简单、轻量级的数据库连接池。

  • DBPool:一个高效、易配置的数据库连接池。它除了支持连接池应有的功能外,还包括了一个对象池,使用户能够开发一个满足自己需求的数据库连接池。
  • XAPool:一个XA数据库连接池。它实现了javax.sql.XADataSource,并提供了连接池工具。
  • Primrose:一个Java开发的数据库连接池。当前支持的容器包括Tomcat4&5、Resin3与JBoss3。它同样也有一个独立的版本,可以在应用程序中使用而不必运行在容器中。Primrose通过一个Web接口来控制SQL处理的追踪、配置,以及动态池管理。在重负荷的情况下可进行连接请求队列处理。
  • SmartPool:一个连接池组件,它模仿应用服务器对象池的特性。SmartPool能够解决一些数据库连接池的问题,如连接泄露(connection leaks)、连接阻塞、JDBC对象清理(如Statements、PreparedStatements)等。
  • MiniConnectionPoolManager:一个轻量级JDBC数据库连接池。它只需要Java 1.5版本(或更高)即可,并且没有依赖第三方包。
  • BoneCP:一个快速、开源的数据库连接池。帮用户管理数据连接,让应用程序能更快速地访问数据库。比c3p0/DBCP连接池的速度快25倍。
  • Druid:它不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySQL、Derby、Postgresql、SQL Server、H2等。

image.png

  • 替换DBCP和c3p0。Druid提供了一个高效、功能强大、扩展性好的数据库连接池。
  • 可以监控数据库访问性能。Druid内置了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这有助于对线上数据库访问性能进行分析。
  • 数据库加密。直接把数据库密码写在配置文件中是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  • SQL执行日志。Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,用户可以按需选择相应的LogFilter,监控自己的应用数据库访问情况。
  • 扩展JDBC。如果用户对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便地编写JDBC层的扩展插件。
  • 监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息。
  • SQL执行的耗时区间分布。什么是耗时区间分布?比如,某个SQL执行了1000次,其中在0~1毫秒区间50次,在1~10毫秒800次,在10~100毫秒100次,在100~1000毫秒30次,在1~10秒15次,在10秒以上5次。通过耗时区间分布,能够非常清楚地知道SQL的执行耗时情况。
  • 监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等。
    2)方便扩展。

  • ExceptionSorter。当一个连接产生不可恢复的异常时,例如Oracle error_code_28 session has been killed,必须立刻将其从连接池中逐出,否则会产生大量错误。目前只有Druid和JBoss DataSource实现了ExceptionSorter。
  • PSCache内存占用优化对于支持游标的数据库(如Oracle、SQL Server、DB2等,不包括MySQL)可以大幅度提升SQL执行性能。一个PreparedStatement对应服务器的一个游标,如果PreparedStatement被缓存起来重复执行,PreparedStatement没有被关闭,服务器端的游标就不会被关闭,那么性能提高会非常显著。在类似“SELECT * FROM T WHERE ID = ?”这样的场景中,性能可能是一个数量级的提升。但在Oracle JDBC Driver中,其他的数据库连接池(DBCP、JBossDataSource)会占用过多内存,极端情况下可能大于1G。Druid调用OracleDriver提供管理PSCache内部API。
  • LRU是一个性能关键指标,特别是Oracle,其中每个Connection对应数据库端的一个进程,如果数据库连接池遵从LRU,则有助于数据库服务器优化,这是重要的指标。Druid、DBCP、Proxool、JBoss遵守LRU,而BoneCP、c3p0则不遵守。BoneCP在mock环境下的性能可能还不错,但在真实环境中就不好了。

英国前首相温斯顿·丘吉尔曾经说过:“批评也许并不会令人满意,但却是必要的。它和人体疼痛的功能类似,它可以唤起人们对于事物不健康状态的关注。”近几年,手机评测比较热门,眼花缭乱的数据库连接池当然也需要一个评测。那么该如何评测呢?评价原则是:性能固然是好的,但是却不能以放弃可靠性为代价。

  • HikariCP:等待5秒,若连接未恢复,抛出SQLExceptions异常,后续getConnection()同样处理。
  • c3p0:完全无反应且无提示,也不会在CheckoutTimeout配置的时长超时后给调用者任何通知。等待2分钟后才醒来,返回一个error。
  • Tomcat:返回一个connection,若调用者如果利用这个无效的connection执行SQL语句,结果可想而知。大约55秒之后醒来,此时getConnection()返回一个error,但未像参数配置的那样等待5秒钟,而是立即返回error。
  • BoneCP:与Tomcat类似,也是约55秒后醒来,有正常反应,且最终等5秒钟后返回error。
  • 连接的测试在getConnection时同步进行,并有独特的优化。
  • 在自己的事务中封装内部池的查询,含testQuery一级initSQLQuery。
  • 当连接Connections归还给连接池的时候,执行rollback操作
  • 在Connection.close的时候,跟踪并关闭废弃语句Statements。
  • 在将Connection连接归还到客户端之前清除SQL警告。
  • 默认参数支持自动提交、事务隔离级别、catalog和只读状态。
  • 对于一些诸如“SQLException对象是否存在断开连接错误”等陷阱进行检查。
到此这篇druid数据库连接池中断重连(druid连接池 mysql120s断开)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • pymysql连接池(pymysql连接sql server)2025-09-04 21:18:10
  • sqlldr字符编码(sqlloader字符编码设置)2025-09-04 21:18:10
  • 将sql文件导入数据库(sql文件导入数据库报错)2025-09-04 21:18:10
  • sql文件转换成csv(sql文件怎么转成mdf)2025-09-04 21:18:10
  • sql while循环(sql while loop)2025-09-04 21:18:10
  • sql使用for循环(sqlfor循环用法)2025-09-04 21:18:10
  • mysql和oracle有什么区别(mysql和oracle有啥区别)2025-09-04 21:18:10
  • sqlserver循环语句(sqlserver 循环语句)2025-09-04 21:18:10
  • sql文件用什么打开较好(sql文件用什么打开较好一点)2025-09-04 21:18:10
  • goldendb数据库 mysql(goldendb数据库官网)2025-09-04 21:18:10
  • 全屏图片