《java数据源—连接池》
《java 数据源—连接池》
1. 数据源的分类:直接数据源、连接池数据源。
2. 连接池、数据源、JNDI
a. 数据源:Java 中的数据源就是连接到数据库的一条路径,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接。
b. 连接池:简单的说就是保存所有的数据库连接的地方, 在系统初始化时,将数据库连接对象存储到内存里,当用户需要访问数据库的时候,并不是建立一个新的连接,而是从连接池中
取出一个已经建立好的空闲连接对象。而连接池负责分配、管理、释放数据库连接对象。注意的是:连接池是由容器(比如 tomcat)提供的,
同时容器也管理着连接池。
Ø 该连接池的解决的问题是:
当使用 java.sql 中提供的 api 创 建数据库连接时候,需要耗费很大的资源,要进行用户名密码数据库连接验证等,即耗费资源也耗费时间。如果在程序中,
每次需要访问数据库时候,都进行数据库 连接,那么势必会造成性能低下;同时,如果用户失误忘记释放数据库连接,会导致资源的浪费等。
而数据库连接池就是解决该问题,通过管理连接池中的多个连接 对象(connection),实现 connection 重复利用。从而,大大提高了数据库连接方面的性能。
Ø 该连接池的功能是:
负责创建,管理,释放,分配数据库连接即(connection)。首先,负责创建相应数目的数据库连接对象(connection)对象,并存放到数据库连接池(connect pool)中。
当用户请求数据库连接时,该连接池负责分配某个处于空闲状态的数据库连接对象;当用户发出释放该数据库连接时,该连接池负责将该连接对象重新设置为空闲状态,
以便被别的请求重复利用。同时;数据库连接池负责检查(空闲时间 > 最大空闲时间)的数据库连接,并释放。
Ø 连接池主要参数介绍
最小连接数:初始化时,系统将负责创建该数目的 connection 放入连接池中。
最大连接数:系统允许创建 connection 的最大数值。当系统请求连接时候,且连接池中不存在空闲的连接:如果 connection 总数未超过最大连接数,
那么连接池负责创建新的 connection 对象,并返回该对象;如果 connection 总数已经到达该最大连接数,那么连接池将用户请求转入等待队列。
3.jdbc 操作数据库
在 Java 开发中,使用 JDBC 操作数据库的四个步骤如下:
①加载数据库驱动程序 (Class.forName("数据库驱动类");)
②连接数据库 (Connection con = DriverManager.getConnection();)
③操作数据库 (PreparedStatement stat = con.prepareStatement(sql);stat.executeQuery();)
④关闭数据库,释放连接 (con.close();)
4. 开源数据连接池 (connection pool):c3p0,BDCP,BoneCP,Proxool...(不提供连接池监控)
a.C3P0 是一个开放源代码的 JDBC 连接池,它在 lib 目录中与 Hibernate 一起发布, 包括了实现 jdbc3 和 jdbc2 扩展规范说明的 Connection 和 Statement 池的 DataSources 对象。
(主页:http://sourceforge.net/projects/c3p0/)
b.DBCP(Database Connection Pool)是一个依赖 Jakarta commons-pool 对象池机制的数据库连接池,Tomcat 的数据源使用的就是 DBCP。
c.BoneCP 是一个开源的快速的 JDBC 连接池。
d.Proxool 是一个 Java SQL Driver 驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中
5. 商业中间件连接池:weblogic、websphere(提供连接池监控)
a.weblogic(oracle) 设置为最大和最小都是 200, 在具体项目应用中,此连接池的持续运行的稳定性很强,在大并发量的压力下性能也相当优秀,另外在一些异常情况下连接池里的连接也能够及时释放。
连接池监控一目了然,及时到位。
b. websphere(IBM)(phere/sfɪə/) 最小 200 最大 300, 在具体项目应用中,此连接池的持续运行的稳定性相当强,在大并发量的压力下性能也足够优秀,另外在一些异常情况下连接池里的连接能够及时释放,
连接池监控配置有些复杂,但是配置好后各项指标一目了然并且有图形显示。
6.Druid 连接池简介 (德鲁伊)
a.Druid 首先是一个数据库连接池。Druid 是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,
包括 DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid 已经在阿里巴巴部署了超过 600 个应用,经过一年多生产环境大规模部署的严苛考验。
b.Druid 是一个 JDBC 组件,它包括三个部分:
基于 Filter-Chain 模式的插件体系。
DruidDataSource 高效可管理的数据库连接池。
SQLParser
c. 可以监控数据库访问性能,Druid 内置提供了一个功能强大的 StatFilter 插件,能够详细统计 SQL 的执行性能,这对于线上分析数据库访问性能有帮助。
d.SQL 执行日志,Druid 提供了不同的 LogFilter,能够支持 Common-Logging、Log4j 和 JdkLog,你可以按需要选择相应的 LogFilter,监控你应用的数据库访问情况。
e. 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver 和 DruidDataSource 都支持 PasswordCallback。
f.Druid 支持所有 JDBC 兼容的数据库,包括 Oracle、MySql、Derby、Postgresql、SQLServer、H2 等等。
g. 扩展 JDBC,如果你要对 JDBC 层有编程的需求,可以通过 Druid 提供的 Filter 机制,很方便编写 JDBC 层的扩展插件。
基本步骤:
1.Druid.jar 包
2.Druid 连接池配置
3.Druid 属性配置图
4. 数据源监控配置
具体配置:https://blog.csdn.net/u011038738/article/details/80680215