DriverPool类,直接由数据库驱动程序构建,便于开发和调试单机高效的非事务程序
Public class DriverPool implements IConnPool{
private String driverName;
private String conURL;
private username;
private password;
private int min,max;
Vector conPool;
private Driver drv;
private class PooledConnection{
private Connection con;
privateboolean available;
private PooledConnection(Connection con,boolean available){
this.con=con;
this.available=available;
}
Connection getConnection(){
return con;
}
boolean isAvailable(){
return available;
}
void setAvailable(boolean available){
conAvailable=available;
}
}
//构造器
public DriverPool(int max,int min,String driverName,String conURL,String username,String password){
this.driverName=driverName;
this.conURL=conURL;
this.username=username;
this.password=password;
this.max=max;
this.min=min;
conPool=new Vector();
addConnectionsToPool(this.min);
//连接池后台监控启动
new PoolMonitor().startNow();
}
private synchronized void addConnectionsToPool(int numPooledCon){
try{
if(drv==null){
drv=(Driver) Class.forName(driverName).netIntance();
DriverManger.registerDriver(drv);
}
for(int i=0;i<numPooledCon;i++){
Connection con=DriverManger.getConnection(conURL,username,password);
PooledConnection pc=newPooledConnection(con,true);
conPool.add(pc);
}
}
catch(Exception e){
e.printStackTrace();
}
}
///监控连接池中的情况,实时回收无效的连接和根据要求往连接池中添加有效地连接,在监控线程中调用
private void moniPool{
removeAnyClosedConnections(); //删除所有无效的连接
if(this.conPool.size()<this.min){
int x=(this.max-this.min)/2;
int y=this.min-this.conPool.size();
if(x>0){
if(x+j>this.max){
this.addConnectionsToPool(x);
}
else{
this.addConnectionsToPool(x+j);
}
}
else(
this.addConnectionToPool(j);
}
}
}
}
private synchronized void removeAnyClosedConnection(){
try{
boolean done=false;
while(!done){
done=true;
for(int i=0;i<conPool.size();i+=){
PooledConnection pc=(PooledConnection) conPool.get(i);
if(pc.getConnection().isClosed()){
conPool.remove();
done=false;
break;
}
}
}
}
catch(SQLException e){
e.printStackTrace();
}
}
//从连接池中取出一个有效的连接
public synchronized Connection getConnection(){
//从池中找出一个有效的连接,返回
for(i=0;i<conPool.size();i++)
{
PooledConnection pc=(PooledConnection) conPool.get(i);
if(pc.isAvailable(){
pc.setAvailbale(false);
return pc.getConnection();
}
}
//如果池中没有就加一个,并返回,保证每个请求都有有效的连接返回
addConnectionsToPool(1);
PooledConnection pc=(PooledConnection) conPool.size()-1);
if(pc.isAvailable()){
pc.setAvailable(false);
}
return pc.getConnection();
}
//关闭连接池中的所有连接
public void closeAllConnections(){
for(int i=0;i<conPool.size();i++){
PooledConnection pc=(PooledConnecion) conPool.get(i);
closeConnection(pc.getConnection());
}
conPool.clear();
}
private void closeConnection(Connection con){
try{
if(con!=null){
con.close();
}
}
catch(SQLException e){
e.printStackTrace();
}
}
//后台监控线程,每秒监控一次
private class PoolMonitor
extends com.beetle.framework.appsrv.AppRunnable{
privat int time;
public PoolMonitor(){
super();
time=1000;
}
protected void end(){
closeAllConnections();
}
public void run(){
while(!this.getStopFlag()){
moniPool();
sleep(time);
}
}
}
}
发表评论
-
spring事务配置实例<2>拦截式
2010-03-30 16:38 903<!-- transaction --> & ... -
ThreadLocal
2010-03-30 11:39 892ThreadLocal用于维护多线程环境中各变量时,非常好用! ... -
html协议的响应头报文-meta
2010-03-14 20:39 1606meta是用来在HTML文档中 ... -
权限控制
2010-02-01 17:09 1284权限控制的方案很 ... -
单例模式相关的问题
2010-01-31 22:02 1252问题: 1.为什么使用单 ... -
JDBC-ODBC连接
2008-08-23 15:43 1522JDBC(Java DataBase ConnectiVity ... -
JDBC常用类和方法-java.sql.*
2008-08-23 15:49 7001、DriverManager类:<clk>< ... -
JDBC结果集的处理
2008-08-23 15:51 1535一.查询 ResultSet对象是 ... -
java.util包结构
2008-08-24 18:33 3在jdk文档中输入java.util 就可以得到下面的java ... -
集合—List类
2008-08-24 18:43 5java.util 接口 List<E> 所 ... -
集合-迭代器Iterator
2008-08-24 19:03 5代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象 ... -
集合-ListIterator类
2008-08-24 19:11 4jdk5 java.util 接口 ListIterator ... -
打包war和war文件部署
2008-08-25 10:53 972#########.打包 1.在IDE中,步骤 在工程项 ... -
集合-Array类
2008-08-25 15:26 5java.util 类 ArrayList<E>j ... -
集合-Set类
2008-08-25 15:41 5java.util 接口 Set<E> ... -
java.util包中几个重要集合类描述
2008-08-25 15:51 1091软件包 java.util 重要的部分用红色标示 包含集合 ... -
动态代理
2010-01-23 13:37 750------java.lang.reflect ...
相关推荐
最新版windows graalvm-ee-java11-windows-amd64-21.2.0.zip最新版windows graalvm-ee-java11-windows-amd64-21.2.0.zip
本项目“Java开发--JSP数据库连接池的研究与实现”深入探讨了如何在JSP中有效地使用数据库连接池,并提供了源代码和相关论文,以便开发者理解和实践。 数据库连接池的基本概念是维护一组预创建的数据库连接,这些...
在 GlassFish 中,数据源连接池是通过 JDBC(Java Database Connectivity)来实现的。 配置 GlassFish 数据源连接池的步骤: 1. 打开 GlassFish 管理控制台 首先,需要打开 GlassFish 的管理控制台,可以通过在...
这个"java-ee-api原版"的压缩包很可能包含了Java EE 6的官方API文档,它是开发人员在使用Java EE 6进行开发时的重要参考资料。下面我们将深入探讨Java EE 6的一些核心概念和技术。 Java EE 6的引入是为了简化企业级...
这个"Java EE-API文档"包含了Java EE平台的所有核心API和技术规范,是开发者理解和使用Java EE技术的重要参考资料。 首先,Java EE API文档主要分为以下几个关键部分: 1. **Servlet API**:Servlet是Java EE中的...
这个“java--ee-simple-case-master.zip”压缩包显然包含了与Java EE相关的学习资料、项目源码和教程,这对于初学者或有经验的开发者来说都是宝贵的资源。 在Java EE中,核心概念包括: 1. **Servlet**:Servlet是...
tomcat10 升级转换工具 命令:java -jar jakartaee-migration-版本号-shaded.jar D:\源路径\demo.war D:\目标路径\newdemo.war
【Java EE-test1】是一个与Java企业级应用开发相关的学习资源,主要涵盖了源代码分析和工具使用的主题。在Java EE的开发过程中,源码的阅读和理解是提升技术水平的重要环节,而工具的合理利用则能极大地提高开发效率...
【Java EE--注册登录系统】是...这个【JAVA EE--注册登录系统】项目为初学者提供了一个学习Java EE基础和安全实践的良好实例,涵盖了Web开发中的核心概念和技术,对于提升Web开发技能和理解用户认证流程有很好的帮助。
这个“JAVA-EE-api-5.0-中英文对照经理版”压缩包包含的是Java EE 5.0版本的API文档,对于学习和理解Java Web开发至关重要。 Java EE 5.0是2006年发布的一个版本,它引入了许多改进,简化了开发流程,并提高了生产...
由于JavaEE更名为Jakarta,原有的javax.*命名空间迁移为jakarta.x,原有项目如需迁移到tomca10.x必须要更改代码,此工具不需修改大量的源代码,只需将打出的war包放到解压后的lib下,执行java -jar jakartaee-...
最新版linux graalvm-ee-java11-linux-aarch64-21.2.0.tar.gz最新版linux graalvm-ee-java11-linux-aarch64-21.2.0.tar.gz
这个"java-ee-warehouse"压缩包很可能包含了一系列的Java EE学习资源,如源代码、教程文档、示例项目等。在深入探讨Java EE的知识点之前,我们先了解一下Java EE的基本概念。 Java EE是Sun Microsystems(现已被...
这个压缩包"java-EE-API.zip"包含了Java EE 6的API规范文档,这对于开发者理解和使用该版本的API至关重要。 首先,Java EE 6 API的核心目标是提供一组标准接口和服务,让开发者可以构建可扩展、健壮且安全的Web应用...
5. **JNDI(Java Naming and Directory Interface)**: 提供了一个查找和管理资源的接口,如数据库连接池。 6. **JMS(Java Message Service)**: 支持异步通信和消息队列,实现解耦的分布式系统。 7. **JSF(Java...
Java EE(Java Platform, Enterprise Edition)是Java平台上用于构建企业级应用的一套全面的框架和服务。Java EE 5是这个平台的一个重要版本,它在2006年发布,为开发者提供了许多改进和新特性,旨在简化开发流程,...
1. **项目结构**:在`java-ee-ssm-day-two-master`这个项目中,我们可以看到典型的SSM项目结构,包括src/main/java目录下的源代码、src/main/resources下的配置文件、以及src/main/webapp下的Web应用资源。...
【Java EE概述】 ...提供的"java_-ee-master.zip"资源包含了一系列的Java EE练习代码,这将是你学习和提升技能的重要辅助工具。通过不断练习和探索,你将能够熟练掌握Java EE,成为一名专业的Java开发者。
**JAVA-EE-api-中英文对照版** Java Enterprise Edition(JAVA-EE)是Java平台的一个重要组成部分,专门用于开发企业级应用。它提供了一系列的API和服务,使得开发者能够构建分布式、多层架构的应用,包括但不限于...
7. **JNDI(Java Naming and Directory Interface)**:JNDI提供了一个接口,用于查找和管理分布式环境中的资源,如数据库连接池、邮件服务器等。 8. **JTA(Java Transaction API)**:JTA用于处理分布式事务,...