Spring 数据库连接池(JDBC)详解
本篇文章主要介绍了基于 Spring 的 JDBC 基本框架搭建、基于 Spring 的 JDBC增删改查、读取配置文件中的数据等,具有很好的参考价值。下面我们来详细讲解。
一、数据库连接池的重要性
在一个简单的数据库应用中,由于对数据库的访问不是很频繁,这时可以简单地在需要访问数据库时,就新创建一个连接,然后关闭它,这样做也不会带来什么性能上的开销。但是,对于一个复杂的数据库应用,情况就完全不同了,频繁的建立、关闭连接,会极大地减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。
二、数据库连接池的基本原理
数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。如:外部使用者可通过 getConnection 方法获取连接,使用完毕后再通过 releaseConnection 方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。
三、数据库连接池技术带来的好处
数据库连接池技术带来了以下几点好处:
1. 资源重用:数据库连接得到重用,避免了频繁创建、释放链接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进行/线程数量)。
2. 更快地系统响应速度:数据库连接池在初始化过程中,往往已经创建了若干数据库连接池置于池中备用。此时连接的初始化工作均已完成,对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。
3. 统一的连接管理,避免数据库连接泄露:在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露。
四、常见的数据库连接池产品
目前数据库连接池产品是非常多的,主要有:
1. dbcp:Apache 出品,Spring 开发组推荐使用的数据库连接池,开发较为活跃,是一个使用极为广泛的数据库连接池产品。
2. c3p0:Hibernate 开发组推荐使用的数据库连接池,它实现了数据源和 JNDI 的绑定。
3. Proxool:Proxool 的口碑较好,没什么负面评价(比如 dbcp 就是因为 Hibernate 认为它 BUG 太多 Hibernate 才不推荐使用的),也是 Hibernate 开发组推荐使用的数据库连接池,不过使用者不算多,开发不够活跃。这个连接池提供了连接池监控的功能,方便易用,便于发现连接池泄露的情况。
五、基于 Spring 的 JDBC 基本框架搭建
在基于 Spring 的 JDBC 基本框架搭建中,我们可以使用 Spring 开发组推荐的 DBCP,DBCP 需要三个 jar 包,分别是:
1. commons-dbcp-1.4.jar
2. commons.pool-1.6.jar
3. commons.collections4-4.0.jar
下载了这三个 jar 包之后,请导入自己的工程中(注意 MySql 的包别忘记导入了)。虽然 dbcp 和 pool 都出了 dbcp2 和 pool2 的版本,Apache 官网上都可以下载,但是这里提供的还是 dbcp1 和 pool1 的版本下载地址,一个原因是 dbcp2 和 pool2 都只可以在 JDK1.7 及 JDK1.7 以上的版本运行,而 dbcp1 和 pool1 则可以在 JDK1.6 的版本运行,考虑到 MyEclipse10 默认自带的 JRE 就是 1.6 版本的,所以这里下载、使用 dbcp1 和 pool1。
我们可以使用 Spring 的 JDBC 模板来实现数据库的增删改查操作。例如,我们可以使用 JdbcTemplate 来实现 StudentManager 类中的数据库操作。