使用享元模式实现数据库连接池
在实际应用开发中,特别是在 WEB 应用系统中,如果 JSP、Servlet 或 EJB 使用 JDBC 直接访问数据库中的数据,那么每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤。而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。
为了提高数据库性能,我们经常使用数据库连接池技术。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic、WebSphere、JBoss)中,基本都提供了这项技术。
数据库连接池技术的思想非常简单,只需要将数据库连接作为对象存储在一个 Vector 对象中。将 Connection 对象在调用前创建好并缓存起来,在用的时候直接从缓存中取值,用完后再放回去,达到资源重复利用的目的。一旦数据库建立连接后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,就可以克服上述缺点,极大地节省系统资源和时间。
下面使用享元模式来实现数据库连接池,代码如下:
为了提高数据库性能,我们经常使用数据库连接池技术。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic、WebSphere、JBoss)中,基本都提供了这项技术。
数据库连接池技术的思想非常简单,只需要将数据库连接作为对象存储在一个 Vector 对象中。将 Connection 对象在调用前创建好并缓存起来,在用的时候直接从缓存中取值,用完后再放回去,达到资源重复利用的目的。一旦数据库建立连接后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,就可以克服上述缺点,极大地节省系统资源和时间。
下面使用享元模式来实现数据库连接池,代码如下:
public class ConnectionPool { private Vector<Connection> pool; private String url = "jdbc:mysql://localhost:3306/test"; private String username = "root"; private String password = "root"; private String driverClassName = "com.mysql.jdbc.Driver"; private int poolSize = 100; public ConnectionPool() { pool = new Vector<Connection>(poolSize); try { Class.forName(driverClassName); for (int i = 0; i < poolSize; i++) { Connection conn = DriverManager.getConnection(url, username, password); pool.add(conn); } } catch (Exception e) { e.printStackTrace(); } } public synchronized Connection getConnection() { if (pool.size() > 0) { Connection conn = pool.get(0); pool.remove(conn); return conn; } return null; } public synchronized void release(Connection conn) { pool.add(conn); } }这样的连接池普遍应用于开源框架,可以有效的提升底层的运行性能。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算