开始想使用c3p0最为底层的连接池,但想想还是算了。只是一个练习的小项目,还是手写一个简单点的吧。也给项目减少点体积,尽管那也大不了多少。
连接池嘛基本的也就是两个功能,取得连接、关闭连接。
下面贴出源码
public class DataSourceUtil {
private static SimplePool connUtil;
public static void init(String url,String user,String password){
connUtil = new SimplePool(url,user,password);
}
public static Connection getConnection(){
return connUtil.getConnection();
}
public static void close(Connection conn){
connUtil.closeConnection(conn);
}
public static void closePool(){
connUtil.shutDown();
}
//构造一个简易的连接池
private static class SimplePool{
String url,user,password;
public SimplePool(String url,String user,String password){
this.url = url;
this.user = user;
this.password = password;
fillQueue();
}
private Queue<Connection> queue = new ArrayDeque<Connection>();
//关闭此连接池,把剩余所有连接进行关闭
void shutDown(){
Connection conn= queue.poll();
while(conn!=null){
try {
conn.close();
} catch (SQLException e) {
LogUtil.waring(SimplePool.class.getName(), "关闭与数据库的连接失败!");
}
conn=queue.poll();
}
}
//将使用完成的Connection重新放回到队列
synchronized void closeConnection(Connection conn){
boolean b = false;
try {
b=conn.getAutoCommit();
if(!b){
conn.commit();
}
conn.setAutoCommit(true);
} catch (SQLException e) {
LogUtil.waring(SimplePool.class.getName(), "将连接重新放回连接池失败!");
fillQueue();
return;
}
queue.offer(conn);
}
//使用得到的连接信息,构造Connection对象并填充到queue。
void fillQueue(){
//构造10个Connection对象并进行填充
while(queue.size()<10){
Connection conn=null;
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
LogUtil.error(SimplePool.class.getName(), "无法取得数据库连接,连接信息url:"+url+",user:"+user+",password:"+password);
return;
}
queue.add(conn);
}
}
//取得Connection队列的第一个,并移除。没有则返回null
synchronized Connection getConnection(){
Connection conn = queue.poll();
if(conn==null) LogUtil.waring(SimplePool.class.getName(), "无法从一个空的连接池里面取得连接!");
return conn;
}
}
}
为了调用方便就把几个方法定义成了static类型的
内部类SimplePool是主要实现的连接池功能,为了能供静态方法调用,所以也定义成了static
思路是
利用一个队列作为数据库连接的容器,当项目被加载的时候进行初始化(由BlogFilter调用),初始10个连接放入队列。
当有用户请求连接的时候则取得队列头部的连接返回,poll在返回连接的时候同时会把此对象此队列移出。
当关闭连接的时候则重新放回队列。
只是很简单的连接池实现,但是供练习用足够了。
分享到:
相关推荐
【简易连接池snappool.jar】是一个专门为Java应用程序设计的轻量级数据库连接池实现。在Java编程中,连接池是管理和复用数据库连接的一种高效技术,它避免了频繁创建和关闭数据库连接带来的性能开销,提升了应用的...
自定义实现的数据库连接池,并进行加锁,保证线程安全,适合初学者学习。
在IT行业中,数据库管理是至关重要的,特别是在使用MySQL这样的关系型数据库时。...通过学习和实践这个简易自带连接池的MySQL操作工具,你将能够深入理解数据库连接管理,并为未来更复杂的项目打下坚实基础。
连接池的基本思想是预先创建并维护一定数量的数据库连接,当应用程序需要时,可以从池中获取一个已存在的连接,使用完毕后归还到池中,而不是每次建立或关闭连接。这样避免了频繁地创建和销毁连接带来的开销,同时也...
Java实现数据库连接池简易教程主要涉及了如何在Java应用程序中创建并管理数据库连接池。数据库连接池是一种优化数据库操作的技术,通过复用已存在的数据库连接,减少频繁创建和关闭连接带来的性能开销。本文将介绍一...
以上代码仅作为示例,实际开发中应使用成熟的数据库连接池库,如Apache的DBCP、C3P0或HikariCP,它们提供了更完善的特性,如连接验证、超时控制、公平调度等。通过这种方式,可以构建更高效、稳定且易于维护的应用...
用java实现的简易的数据库连接池及其管理 课程设计 编写一关于Microsoft Access数据库连接池及其管理的相关类,要求能从XML配置文件中读取该数据库驱动程序,数据库名,连接池最大连接数,最多等待用户数,查询...
当我们需要连接时只需要从连接池中获取已存在的连接,当初始化的几个连接都没有时,会重新创建一个连接,使用完连接后不会去销毁连接,而是归还给连接池供后面需要连接的使用。 知识点二:常用的连接池 常用的连接...
这是一个很简易并且很干净的tomcat连接池示例,在该示例中有详细的说明,最为重要的是它只突出表现tomcat和链接池的技术,剥离了其他繁琐的技术,所以很适合对初学连接池的读者,和像我一样当年花了好长时间配了好久...
纯手写简易版的数据库连接池jar包
Tomcat作为一款广泛使用的Java应用服务器,其数据库连接池的正确配置对于提高系统性能、确保应用稳定运行至关重要。数据库连接池可以有效管理数据库连接资源,减少频繁创建和销毁数据库连接所带来的性能开销。本文将...
关于使用JDBC的一些小Demo.主要是关于使用基本的JDBC进行增删改查操作,还有使用数据库连接池技术进行连接,最后写了几个关于JDBCTemplate的小Demo
简易ORM操作工具,低代码,操作简单,功能强大,上手快,纯原生JDBC+阿里的Druid连接池,集成Mybatis-Plus的条件构造器,在此之上添加了多表连接的条件构造,使增删改查变得更容易,支持动态一对一(一对多)查询,...
这个简易图书管理系统的项目,旨在为初学者提供一个实践SSM框架的机会,帮助他们巩固和深化对这三大框架的理解。 首先,Spring框架作为基础,它是一个全面的后端应用程序开发框架,提供了依赖注入(DI)和面向切面...
c3p0是一个开源的JDBC连接池实现,它提供了对数据库连接的管理和优化,能够显著提升基于数据库的应用程序性能。本文将深入解析c30p配置中的关键参数,帮助理解其工作原理及如何进行有效配置。 #### ...
2. **连接池**:通过复用已存在的TCP连接,减少握手和TLS协商的时间,提高请求速度。 3. **线程安全**:OkHttp的设计使得它可以在多个线程中安全地使用。 4. **异步请求**:OkHttp支持异步请求,可以使用回调或协程...
它能提供关于查询性能、连接状态、内存使用等关键信息,帮助识别潜在的性能瓶颈,并及时进行调整和优化。不过,对于需要图形界面或者实时监控的场景,可能需要考虑其他更专业的工具,如 Spotlight on MySQL 和 MySQL...
IIS的简易版通常指的是在小型项目或测试环境中使用的简化配置和管理的版本,旨在降低入门门槛,提高效率。 一、IIS服务器的基本功能 1. Web服务:IIS支持HTTP、HTTPS协议,能够发布静态网页、动态网页(如ASP.NET...
JavaWeb简易的论文管理系统项目源码 本作品实现了以下的功能: 选题申报:毕业设计题目的录入、查询,每位老师可以...数据库连接使用C3P0连接池进行管理 本系统可以在满足Java 1.8以及Tomcat使用要求的开发环境上运行