版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
连接池和数据源知识点连接池和数据源的基本概念配置Tomcat数据源配置struts数据源一.概述:在实际项目的开发中,特别是web应用程序中,如Jsp,Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据方请求必须建立连接,存取数据,关闭连接等步骤,而数据库连接是一种非常昂贵的资源,频繁的建立连接,关闭连接必定是数据库性能降低,再者,JDBC直接连接数据库的方式还存在数据库连接泄漏问题。使用数据库连接池技术是解决上述问题的最常用的方法,在许多应用服务器(如websphere,weblogic,jBoss)中都提供了这种技术.二.连接池实现的原理:就是在应用启动时建立一定数量的数据库连接,并将这些数据库连接作为对象存储在一个容器对象中。而程序中所有的数据库请求访问都可以共享这些连接,这样,通过复用这些已经建立的数据库连接,不必在每次访问数据库时都重新建立连接,极大的节省了系统资源和时间。另外,为了回收并重新使用那些没有及时关闭的数据库连接,连接池都提供了一种超时回收机制。也就是当数据库的连接在指定的时间内没有活动,连接池就把这些连接重新放到可以使用的队列。新的连接请求到来时便可以再次使用这些连接。这种超时回收连接的机制可以克服数据库链接泄漏的问题。三.几个常见的开源的数据库连接池DBCP连接池它是一个依赖于Jakatacommons-pool对象池机制的数据库连接池,DBCP可以直接在应用程序中使用。1.1.官方下载网址:/commons/dbcp/1.2.将下载後的文件解压获得三个jar文件commons-dbcp-1.2.1.jar,commons-pool-1.3.jar,commons-collections-3.2.jar1.3.将上述三个.jar文件保存到项目的WEB-INF\lib下,即加入到CLASSPATH中。1.4.使用方法1.4.1.直接在程序中使用首先要创建BasicDataSource,然后通过它来获得数据库连接对象ConnectionPropertiesp=newProperties();1.4.2.通过tomcat使用DBCP数据源需要修改tomcat的server.xml文件或者配置位于tomcat文件夹下conf\Catelina\local文件夹下的“项目名称.xml”文件Class.forName(“”);//加载驱动程序Connectionconn=DriverManager.getConnection(proxool.)三.在 Tomcat上配置连接池与配置数据源基本相同。唯一需要的就是在
server.xml文件中的
<ResourceParams>标签之间添加几个与连接池相关的参数设置。配置连接池时需要添加的配置代码段:<!—回收被遗弃的(一般是忘了释放的 )数据库链接到连接池中<parameter><name>removeAbandoned</name><value>true</value></parameter><!—数据库链接超过 60秒不用将视为被遗弃而回收到连接池中<parameter><name>removeAbandonedTimeout</name><value>60</value></parameter><!—将被遗弃的数据库链接的回收记入日至<parameter><name>logAbandoned</name><value>true</value></parameter>Tomcat中的数据源数据源是JDBC2.0种引入的一个概念。并且在 javax.sql包中定义了接口描述这个概念。在数据库的 JDBC驱动程序中有该接口的实现类。例如 :
DataSource来
中的
类就实现了
DataSource接口。在程序中使用数据源有两种方式:一种是在程序中直接创建类的对象,该对象实现了JDBC驱动程序中的DataSource接口.并使用该对象获得数据库连接;另一种方法是使用JNDI注册数据源,然后在程序中查询JNDI服务中的数据源,这样用户就只需要提供一个逻辑名称,而不是数据库登录的具体细节。一.
配置数据源要使用第二种形式的 JNDI数据源,必须首先进行配置数据源的 JNDI命名服务。由于Tomcat提供了一个称为 DBCP(DatabaseConnectionPool)的数据源实现,所以可以在server.xml文件中进行数据源的配置即可。1.安装
DBCPDBCP
依赖于以下几个
apachejakarta项目的几个公用包
:Commons-collections.jar首先查看这三个文件是否存在于 TOMCA common\lib 位置.如果不存在,则可以到下载.当前的最新版本为 将其解压缩,并将其中的.jar文件复制到TOMCAT_HOME\common\lib下.2.安装相应的后台数据库的 JDBC驱动器到 common\lib 下.如OracleJDBC驱动class12.jar,Sqlserver2000JDBC驱动 msbase.jar,mssqlserver.jar,msutil.jar3.配置
TOMCAT_HOME\conf\.server.xml
文件.配置JNDI数据源需要在 TOMCAT_HOME\conf\server.xml<Context>和</Context></host>标签之间添加资源声明 :
文件的3.1.Tomcat5.5.
的配置在server.xml文件的最后部分的</Host>标签之前加入标记<Context>⋯⋯. </Context>即可连接池 -->以下配置连接 oracle数据库<Contextpath="/ch14"docBase="d:\ch14" crossContext="true"debug="0"reloadable="true"><Resourcename="jdbc/oracle/ora9"auth="Container"url="jdbc:oracle:thin:@localhost:1521:ora9"username="system"password="lcm7373"maxActive="20"maxIdle="10"maxWait="-1"/></Context>连接池 -->以下配置连接 Sqlserver数据库<Contextpath="/sqlserverds"reloadable="true"docBase="D:\eclipseApp\webapps1\sqlserverds"workDir="D:\eclipseApp\webapps1\sqlserverds\work"><Resourcename="jdbc/sqlserver/sqlserverDS"auth="Container"url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Sql2000DB"username="sa"password="sa"maxActive="20"maxIdle="10"maxWait="-1"/></Context>连接池 -->以下配置连接 mysql数据库<Contextpath="/ch14"docBase="ch14"debug="0"reloadable="true"crossContext="true"><Resourcename="jdbc/mysql/sql_test"auth="Container"url="jdbc:mysql://localhost/sql_test?userUnicode=true&characterEncoding=gb2312"username="root"password="lcm3377"maxActive="20"maxIdle="10"maxWait="-1"/></Context>说明:对于大型应用,如果需要跨数据库操作,则可以在一个
<Context>标记中配置多个<Resource>子标记.web应用程序中数据源的使用方法:设计提供连接对象 Connection
的类packageimportimportimportimport
db;// 注意:获得的 Connection 对象不能在普通的 java 类中(如在main函数中)直接调用因为,数据源由web服务器管理!!final
publicprivatestatic {//
class Database{static DataSource初始化静态成员
ds=null
;//
静态成员/*try{ContextinitCtx=newInitialContext();ContextenvCtx=(Context)initCtx.lookup("java:comp/env");ds=(DataSource)envCtx.lookup("jdbc/oracle/ora9");}catch(Exceptione2){e2.printStackTrace();}*/initialize ();}public Database(){}初始化数据源public static void initialize(){try {ContextinitCtx= newInitialContext();ContextenvCtx=(Context)initCtx.lookup(
"java:comp/env"
);//jdbc/oracle/ora9 数据源名ds=(DataSource)envCtx.lookup( "jdbc/oracle/ora9"}catch (Exceptione){e.printStackTrace();
);}}从连接池中获得一个连接public static ConnectiongetConnection(){Connectionconn= null ;try {conn=ds.getConnection();}catch (Exceptione1){e1.printStackTrace();}return conn;}}.在业务逻辑方法处理类中使用池中的连接package db;import import // 业务逻辑层public class// 这个方法是在
BusinessLayer{jsp 页面或servlet
中调用的业务逻辑方法
(专业用法
)
。public
CollectiongetNewPost(Stringsql){Collection<PostBean>postList=//Databasedb= newDatabase();Connectionconn= null ;Statementst= null ;ResultSetrs= null ;
newArrayList<PostBean>();try {conn=db. getConnection ();st=conn.createStatement();rs=st.executeQuery(sql);Stringprovince,city,tele,post;while (rs.next()){province=rs.getString( "province" );city=rs.getString( "city" );tele=rs.getString( "tele" );post=rs.getString( "post" );Stringt=province+ "\t" +city+ "\t" +tele+PostBeanpb= newPostBean(province,city,tele,post);postList.add(pb);System. out.println(t);
"\t"
+post;}}catch (Exceptione1){e1.printStackTrace();}finallytry {
{if (st!= nullst.close();
){}if (rs!= null ){rs.close();}if (conn!= null ){conn.close();}}catch (Exceptione2){e2.printStackTrace();}}return postList;}}在web页面中调用业务逻辑方法核心代码:<%要执行的语句Stringsql="select*frompostwhereprovince='db.BusinessLayerbl=newdb.BusinessLayer();
四川'" ;CollectionpostList=bl.getNewPost(sql);//
获得集合对象%>遍历集合
postList
,显示数据。3.2.Tomcat5.5以下版本配置以下配置连接 oracle数据库<!--TomcatRootContext--><!--<Contextpath=""docBase="ROOT"debug="0">--><Contextpath="/ch14"docBase="ch14" crossContext="true"debug="0"reloadable="true"><Resourcename="jdbc/oracle/ora9" //JNDI名字auth="Container"<ResourceParamsname="jdbc/oracle/ora9"><parameter><name>factory</name></parameter><parameter><name>driverClassName</name></parameter><parameter><name>url</name><value>jdbc:oracle:thin:@localhost:1521:ora9</value></parameter><parameter><name>username</name><value>system</value></parameter><parameter><name>password</name><value>lcm7373</value></parameter><parameter><name>maxActive</name><value>20</value></parameter><parameter><name>maxIdle</name><value>10</value></parameter><parameter><name>maxWait</name><value>10000</value></parameter></ResourceParams></Context>以下配置连接 sqlserver数据库<Contextpath="/jspdev"docBase="jspdev"debug="0"reloadable="true"crossContext="true"><parameter><name>factory</name></parameter><parameter><name>driverClassName</name></parameter><parameter><name>url</name></parameter><parameter><name>username</name><value>bn</value></parameter><parameter><name>password</name><value>bn</value></parameter><parameter><name>maxActive</name><value>20</value></parameter><parameter><name>maxIdle</name><value>10</value></parameter><parameter><name>maxWait</name><value>-1</value></parameter></ResourceParams></Context>4.配置web.xml文件(数据源在web.xml中的配置,对于 Tomcat高版本不是必需的要在web应用中使用上面配置的 JNDI数据源,还需要在相应的
)
web应用配置文件web.xml中添加资源引用的配置 .例如:<web-app><description>JSP中的高级数据库应用实例 </description><resource-ref><description>DataSource</description><res-ref-name>jdbc/oracle/ora9</res-ref-name>//与server.xml中名称一致</resource-ref></web-app>.使用配置的数据源获得数据源核心代码如下:方法一:Contextctx=newInitialContext();DataSourceds=(DataSource)ctx.lookup( “java:comp/env/jdbc/oracle/ora9方法二://1、创建命名服务环境Contextctx=newInitialContext();if(ctx==null)thrownewException("NoContext");//2、从JNDI中查询数据源对象ContextenvCtx=(Context)ctx.lookup(" java:comp/env");ds=(DataSource)envCtx.lookup(" jdbc/oracle/ora9 ");
”)2.获得数据库连接对象Connectionconn=ds.getConnection();3.说明:为了在应用程序中更好的使用连接池技术获得数据源
,进而获得一个连接对象
.通常采用如下的代码来获得连接对象
.3.1.方法一:publicclassSqlTestDS{privatestaticDataSourceds=null;static{init();}privatestaticvoidinit(){try{1、创建命名服务环境Contextctx=newInitialContext();if(ctx==null)thrownewException("NoContext");2、从JNDI中查询数据源对象ContextenvCtx=(Context)ctx.lookup("java:comp/env");ds=(DataSource)envCtx.lookup("jdbcc/oracle/ora9");}catch(Exceptione){e.printStackTrace();}}//将构造函数定义为 private权限是为了保证全局只有一个 SqlTestDS实例也就是实现了单例模式privateSqlTestDS(){}publicstaticConnectiongetConnection()throwsSQLException{if(ds==null){thrownewSQLException("数据源对象为空! ");}else{3、从数据源中获取数据库连接returnds.getConnection();}}}3.2.方法二:publicclassDatabaseConn{//获得连接对象publicstaticsynchronizedConnectiongetConnection()throwsException{try{1、创建命名服务环境ContextenvCtx=(Context)ctx.lookup("java:comp/env");ds=(DataSource)envCtx.lookup("jdbc/oracle/ora9");returnds.getConnection();}catch(SQLExceptione){throwe;}}catch(NamingExceptione){throwe;}}}有了这个类,便可以在需要的地方(java代码或Jsp中)调用这个静态方法获得一个连接对象了.当执行完数据库操作之后,可以执行conn.close()方法,以便让连接池管理器回收这个连接(但不关闭到数据库的物理连接)Struts的JDBC数据源配置在struts中,一般是通过 JDBC数据源来连接数据库。JDBC数据源的配置通常放在 struts的配置文件中,这样方便配置的修改。JDBC数据源可以在struts配置文件的<data-source>元素中定义。用<data-source>元素可以在数据源元素中定义多个数据源。一.<data-source>元素及其属性的作用:元素属性描述type实现JDBC扩展API接口的类的名字autoCommit用这个数据源创建的连接,默认的自动提交模式。driverClassName用于实现JDBC驱动程序接口的类urlJDBCUrl的值。username访问数据库的用户名。password访问数据库的口令。autoCommit是否自动提交true自动提交false手动提交key被action类用来查找这个数据源的(标识)名字description对这个数据源的描述loginTimeoutmaxCountminCountreadOnly
超时值。连接到这个数据源的最大连接数。需要创建的最少连接数。创建的连接的只读状态。说明:当配置了多个数据源时<data-source>的属性key才是必需的。例1:下面是struts配置文件中定义的一个Sqlserver2000数据源的例子。<data-sources><data-sourcetype="mons.dbcp.BasicDataSource"><set-propertyproperty="autoCommit"value="true"/><set-propertyproperty="driverClassName"value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/><set-propertyproperty="url"value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Sql2000DB"/><set-propertyproperty="username"value="sa"/><set-propertyproperty="password"value="sa"/><set-propertyproperty="maxCount"value="10"/><set-propertyproperty="minCount"value="2"/><!—以下为可选配置<set-propertyproperty=”description”value=”Sqlserver2000DataSource”/><set-propertyproperty=”maxActive”value=”10”/><set-propertyproperty=”maxWait”value=”5000”/><set-propertyproperty=”defaultAutoCommit”value=”false”/></data-source></data-sources>例2:下面是struts配置文件中定义的一个oracle92数据源的例子。<data-sourcetype="mons.dbcp.BasicDataSource"key="ora9"><set-propertyproperty="autoCommit"value="true"/><set-propertyproperty="description"value="Oracle92DataSource"/><set-propertyproperty="driverClassName"value="oracle.jdbc.driver.OracleDriver"/><set-propertyproperty="url"value="jdbc:oracle:thin:@localhost:1521:ora9"/><set-propertyproperty="username"val
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 寒露文化传承与应用模板
- 小学数学《分数除法》50道应用题包含答案
- DB2201T 60-2024 西餐厅服务规范
- 职业导论-房地产经纪人《职业导论》深度自测卷1
- 亲子活动主持词
- 二零二五年度船舶运输代理合同
- 人教版四年级数学上册寒假作业(九)(含答案)
- 上海市竹欣中学2024-2025学年七年级上学期英语期末测试卷(含答案无听力原文及音频)
- 重庆市第一中学2024-2025学年高三上学期12月月考生物试题(有答案)
- 燕山大学《数字信号处理》2023-2024学年第一学期期末试卷
- 【大学课件】微型计算机系统
- (主城一诊)重庆市2025年高2025届高三学业质量调研抽测 (第一次)英语试卷(含答案)
- 2025关于标准房屋装修合同的范本
- 中国建材集团有限公司招聘笔试冲刺题2025
- 2024年马克思主义基本原理知识竞赛试题70题(附答案)
- 2024年湖北省中考物理真题含解析
- 荔枝病虫害防治技术规程
- 资金借贷还款协议
- 《实验性研究》课件
- 中国革命战争的战略问题(全文)
- 2024-2025学年高考英语语法第一轮复习:定语从句(讲义)(原卷版+解析)
评论
0/150
提交评论