|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,数据|数据库|数据库毗连数据库毗连池在编写使用服务是常常必要用到的模块,太甚频仍的毗连数据库对服务功能来说是一个瓶颈,利用缓冲池手艺能够来打消这个瓶颈。我们能够在互联网上找到良多关于数据库毗连池的源程序,可是都发明如许一个配合的成绩:这些毗连池的完成办法都分歧水平地增添了与利用者之间的耦合度。良多的毗连池都请求用户经由过程其划定的办法猎取数据库的毗连,这一点我们能够了解,究竟今朝一切的使用服务器取数据库毗连的体例都是这类体例完成的。可是别的一个配合的成绩是,它们同时不同意利用者显式的挪用Connection.close()办法,而必要用其划定的一个办法来封闭毗连。这类做法有两个弱点:
第一:改动了用户利用习气,增添了用户的利用难度。
起首我们来看看一个一般的数据库操纵历程:
intexecuteSQL(Stringsql)throwsSQLException
{
Connectionconn=getConnection();//经由过程某种体例猎取数据库毗连
PreparedStatementps=null;
intres=0;
try{
ps=conn.prepareStatement(sql);
res=ps.executeUpdate();
}finally{
try{
ps.close();
}catch(Exceptione){}
try{
conn.close();//
}catch(Exceptione){}
}
returnres;
}
利用者在用完数据库毗连后一般是间接挪用毗连的办法close来开释数据库资本,假如用我们后面提到的毗连池的完成办法,那语句conn.close()将被某些特定的语句所替换。
第二:使毗连池没法对当中的一切毗连举行独有把持。因为毗连池不同意用户间接挪用毗连的close办法,一旦利用者在利用的过程当中因为习气成绩间接封闭了数据库毗连,那末毗连池将没法一般保护一切毗连的形态,思索毗连池和使用由分歧开辟职员完成时这类成绩更简单呈现。
综合下面提到的两个成绩,我们来会商一下怎样办理这两个要命的成绩。
起首我们先设身处地的思索一下用户是想怎样来利用这个数据库毗连池的。用户能够经由过程特定的办法来猎取数据库的毗连,同时这个毗连的范例应当是尺度的java.sql.Connection。用户在猎取到这个数据库毗连后能够对这个毗连举行恣意的操纵,包含封闭毗连等。
经由过程对用户利用的形貌,如何能够接受Connection.close办法就成了我们这篇文章的主题。
为了接受数据库毗连的close办法,我们应当有一品种似于钩子的机制。比方在Windows编程中我们能够使用HookAPI来完成对某个WindowsAPI的接受。在JAVA中一样也有如许一个机制。JAVA供应了一个Proxy类和一个InvocationHandler,这两个类都在java.lang.reflect包中。我们先来看看SUN公司供应的文档是怎样形貌这两个类的。
publicinterfaceInvocationHandler
InvocationHandleristheinterfaceimplementedbytheinvocationhandlerofaproxyinstance.
Eachproxyinstancehasanassociatedinvocationhandler.
Whenamethodisinvokedonaproxyinstance,
themethodinvocationisencodedanddispatchedtotheinvokemethodofitsinvocationhandler.
SUN的API文档中关于Proxy的形貌良多,这里就不排列出来。经由过程文档对接口InvocationHandler的形貌我们能够看到当挪用一个Proxy实例的办法时会触发Invocationhanlder的invoke办法。从JAVA的文档中我们也同时懂得到这类静态代办署理机制只能接受接口的办法,而对一样平常的类有效,思索到java.sql.Connection自己也是一个接口由此就找到懂得决怎样接受close办法的前途。
起首,我们先界说一个数据库毗连池参数的类,界说了数据库的JDBC驱动程序类名,毗连的URL和用户名口令等等一些信息,该类是用于初始化毗连池的参数,详细界说以下:
publicclassConnectionParamimplementsSerializable
{
privateStringdriver;//数据库驱动程序
privateStringurl;//数据毗连的URL
privateStringuser;//数据库用户名
privateStringpassword;//数据库暗码
privateintminConnection=0;//初始化毗连数
privateintmaxConnection=50;//最年夜毗连数
privatelongtimeoutValue=600000;//毗连的最年夜余暇工夫
privatelongwaitTime=30000;//取毗连的时分假如没有可用毗连最年夜的守候工夫
在1995年5月23日以“Java”的名称正式发布了。 |
|