第一节:数据库连接池
1.为什么使用数据库连接池
回顾:jdbc步骤:
1.加载驱动
2.创建连接
3.sql预编译 (Statement/PreparedStatement ?)
4.执行sql(DQL:executeQuery(), DML:executeUpdate())
5.关闭连接
在之前,我们每一次操作数据库,都需要走创建连接,并且用过就关闭。考虑一波并发。假如现在同时有10000个
人访问数据库。mysql扛不住,内存扛不住。
如何解决?使用数据库连接池
问题:
1.假如现在有10000人同时访问,但是连接池中只有4个连接,此时,总有人需要等待很长时间,用户体验不好。
2.假如现在连接池中有10000个连接对象,一年中,只有一个人访问。资源极度浪费。老板不好。
怎么解决?先做市场调研。根据市场的需求来决定!
时间换空间,空间换时间。
2.数据库连接池的简介
- 概念:
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。 - 常见数据库连接池
C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate [2]一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
Proxool:是一个Java SQL Driver驱动程序,提供了对选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中,完全可配置,快速、成熟、健壮。可以透明地为现存的JDBC驱动程序增加连接池功能。
Jakarta DBCP:DBCP是一个依赖Jakartacommons-pool对象池机制的数据库连接池。DBCP可以直接的在应用程序中使用。
DBPool:是一个高效、易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池,使用户能够开发一个满足自己需求的数据库连接池。
Druid(德鲁伊特):DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池)。
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分析语义实现的。
3. 代码实现
第一步:先导jar包,并且添加druid.properties配置文件
第二步:改造JDBCUtil文件:
第三步:测试
第一步:导jar包
从maven仓库下载
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
https://mvnrepository.com/
第二步:读取配置文件
第三步:改造JDBCUti