使用享元模式实现数据库连接池
在实际应用开发中,特别是在 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
- 大数据
- 云计算