Java attack - Java 数据库连接池
Java 数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
在 Java 中开源的数据库连接池有以下几种 :
1、C3P0:是一个开放源代码的 JDBC 连接池,它在 lib 目录中与 Hibernate [2] 一起发布,包括了实现 jdbc3 和 jdbc2 扩展规范说明的 Connection 和 Statement 池的 DataSources 对象。
2、Proxool:是一个 Java SQL Driver 驱动程序,提供了对选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中,完全可配置,快速、成熟、健壮。可以透明地为现存的 JDBC 驱动程序增加连接池功能。
3、Jakarta DBCP:DBCP 是一个依赖 Jakartacommons-pool对象池机制的数据库连接池。DBCP 可以直接的在应用程序中使用。
4、DDConnectionBroker:是一个简单、轻量级的数据库连接池。
5、DBPool:是一个高效、易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池,使用户能够开发一个满足自己需求的数据库连接池。
6、XAPool:是一个 XA 数据库连接池。它实现了 javax.sql.XADataSource 并提供了连接池工具。
7、Primrose:是一个 Java 开发的数据库连接池。当前支持的容器包括 Tomcat4&5、Resin3 与 JBoss3。它同样也有一个独立的版本,可以在应用程序中使用而不必运行在容器中。Primrose 通过一个 WEB 接口来控制 SQL 处理的追踪、配置,以及动态池管理。在重负荷的情况下可进行连接请求队列处理。
8、SmartPool:是一个连接池组件,它模仿应用服务器对象池的特性。SmartPool 能够解决一些临界问题如连接泄漏(connection leaks)、连接阻塞、打开的 JDBC 对象(如 Statements、PreparedStatements)等。SmartPool 的特性包括:
- 支持多个 pool
- 自动关闭相关联的 JDBC 对象
- 在所设定 time-outs 之后察觉连接泄漏
- 追踪连接使用情况
- 强制启用最近最少用到的连接
- 把 SmartPool“包装”成现存的一个 pool
9、MiniConnectionPoolManager:是一个轻量级JDBC数据库连接池。它只需要 Java1.5(或更高)并且没有依赖第三方包。
10、BoneCP:是一个快速、开源的数据库连接池。帮用户管理数据连接,让应用程序能更快速地访问数据库。比 C3P0/DBCP 连接池速度快 25 倍。
11、Druid:Druid 不仅是一个数据库连接池,还包含一个 ProxyDriver、一系列内置的 JDBC 组件库、一个 SQL Parser。
支持所有 JDBC 兼容的数据库,包括 Oracle、MySql、Derby、Postgresql、SQL Server、H2 等。
Druid针对 Oracle 和 MySql 做了特别优化,比如:
- Oracle 的 PS Cache 内存占用优化
- MySql 的 ping 检测优化
Druid 提供了 MySql、Oracle、Postgresql、SQL-92 的 SQL 的完整支持,这是一个手写的高性能 SQL Parser,支持 Visitor 模式,使得分析 SQL 的抽象语法树很方便。
简单 SQL 语句用时 10 微秒以内,复杂 SQL 用时 30 微秒。
通过 Druid 提供的 SQL Parser 可以在 JDBC 层拦截 SQL 做相应处理,比如说分库分表、审计等。Druid 防御 SQL 注入攻击的 WallFilter,就是通过 Druid 的 SQL Parser 分析语义实现的
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持 JDBC3规范和 JDBC2的标准扩展。目前使用它的开源项目有 Hibernate、Spring等。