亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP中tomcat的SQLServer2000數據庫連接池的配置

2019-11-18 16:21:54
字體:
來源:轉載
供稿:網友

  jsp中tomcat的SQL Server2000數據庫連接池的配置
環境:
1. 數據庫:Microsoft SQL Server 2000
2. 數據庫驅動程序:net.sourceforge.jtds.jdbc.Driver

JNDI(java Naming and Directory Interface)概述:
Tomcat4(5)提供了一個與Java EnterPRise Edition應用服務相兼容的JNDI--InitialContext實現實例。它的初始數據設置在$CATALINA_HOME/conf/server.xml文件里,并可能在網頁應用環境描述(/WEB-INF/web.xml)里被下列元素引用:
1) <env-entry>--環境入口,設置應用程序如何操作。
2) <resource-ref>--資源參數,一般是數據庫驅動程序、JavaMail session、自定義類工廠等。
3) <resource-env-ref>--在Servlet 2.4里用來簡化設置不需認證信息的資源資源如環境參數、resource-ref變量。

InitialContext在網頁應用程序初始化時被設置,用來支持網頁應用程序組件。所有的入口和資源都放在JNDI命名空間里的java:comp/env段里。點擊下列網址以獲取更多信息:
1) Java命名和目錄接口(Java Naming and Directory Interface)
2) J2EE平臺說明(J2EE Platform Specification)

設置JNDI資源
設置JNDI資源要在$CATALINA_HOME/conf/server.xml文件里使用下列標志符:
1) <Environment>--設置域個可變的JNDI InitialContext入口的名字和值(同上面說的<env-entry>等價)。
2) <Resource>--設置應用程序可用的資源的名字和類型(同上面說的<resource-ref>等價)。
3) <ResourceParams>--設置Java資源類工廠的名稱或將用的JavaBean屬性。
4) <ResourceLink>--給全局JNDI環境(JNDI Context)添加一個鏈接。
上述這些標志符必須放在<Context>和</Context>之間(針對專門的網頁應用程序)或<DefaultContext>和</DefaultContext>之間。
此外,設在網頁應用環境描述(Web application Descriptor)(/WEB-INF/web.xml)里的名字和值也在初始環境(Initial Context)里被設置,當被<Environemt>元素值允許時將被重設初始值。
全局變量能在<Server>子元素的<GlobalNamingResources>里設置。

數據庫連接池概述:
數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池正是針對這個問題提出來的。
數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的數據庫連接來避免因為沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。
數據庫連接池在初始化時將創建一定數量的數據庫連接放到連接池中,這些數據庫連接的數量是由最小數據庫連接數來設定的。無論這些數據庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能占有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。數據庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:
1) 最小連接數是連接池一直保持的數據庫連接,所以如果應用程序對數據庫連接的使用量不大,將會有大量的數據庫連接資源被浪費;
2) 最大連接數是連接池能申請的最大連接數,如果數據庫連接請求超過此數,后面的數據庫連接請求將被加入到等待隊列中,這會影響之后的數據庫操作。
3) 如果最小連接數與最大連接數相差太大,那么最先的連接請求將會獲利,之后超過最小連接數量的連接請求等價于建立一個新的數據庫連接。不過,這些大于最小連接數的數據庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時后被釋放。

配置Tomcat數據庫連接池的前提:
1. 必須裝有Java運行環境;
2. 必須有SQL Server2000數據庫服務器(可以不在本地);
3. 必須有jtds.jar,并將它放在$CATALINA_HOME/common/lib目錄下(只能是這里)。使用它是因為Microsoft公司的Java SQL Server驅動程序不支持二次查詢,可到網上搜到。目前使用的是jtds-0.6.jar。

在$CATALINA_HOME/conf/server.xml里設置數據庫連接池:
下面是配置的代碼,必須放在<Host>和</Host>之間。
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>
<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/connectDB">
<parameter>
  <name>maxActive</name>
  <!-- Maximum number of DB connections in pool.Set to 0 for no limit. -->
  <value>100</value>
</parameter>
<parameter>
  <name>maxIdle</name>
  <!-- Maximum number of idle DB connections to retain in pool.Set to 0 for no limit. -->
  <value>30</value>
</parameter>
<parameter>
  <name>maxWait</name>
  <!-- Maximum time to wait for a DB connection to become available in ms.An exception is thrown if this timeout is exceeded.Set to -1 to wait indefinitely. -->
  <value>10000</value>
</parameter>
<parameter>
  <name>removeAbandoned</name>
  <!-- Abandoned DB connections are removed and recycled -->
  <value>true</value>
</parameter>
<parameter>
  <name>removeAbandonedTimeout</name>
  <!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned.  -->
  <value>60</value>
</parameter>
<parameter>
  <name>logAbandoned</name>
  <!-- Log a stack trace of the code which abandoned -->
  <value>false</value>
</parameter>
<parameter>
  <name>factory</name>
  <!-DBCP Basic Datasource Factory -->
  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
  <name>username</name>
  <!-- Database User Name -->
  <value>Iorishinier</value>
</parameter>
<parameter>
  <name>passWord</name>
  <!-- User Password -->
  <value>mypasswd</value>
</parameter>
<parameter>
  <name>driverClassName</name>
  <!-- Database Driver Class Name -->
  <value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<parameter>
  <name>url</name>
  <!-- Database Address -->
  <value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value>
</parameter>
</ResourceParams>
</Context>

下面是一些參數的說明:
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
其中:
1) path  指定路徑,這里設定的是$CATALINA_HOME/webapps下的quality目錄;
2) docBase 文件根目錄。

3) reloader  當網頁被更新時是否重新編譯。
4) maxActive 連接池的最大數據庫連接數。設為0表示無限制。
5) maxIdle  數據庫連接的最大空閑時間。超過此空閑時間,數據庫連接將被標記為不可用,然后被釋放。設為0表示無限制。
6) maxWait 最大建立連接等待時間。如果超過此時間將接到異常。設為-1表示無限制。
7) removeAbandoned 回收被遺棄的(一般是忘了釋放的)數據庫連接到連接池中。
8) removeAbandonedTimeout 數據庫連接過多長時間不用將被視為被遺棄而收回連接池中。
9) logAbandoned 將被遺棄的數據庫連接的回收記入日志。
10) driverClassName JDBC驅動程序。
11) url   數據庫連接字符串

在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml里設置被引用的資源:
下面是配置代碼,必須放在<web-app>和</web-app>里。
<!-- Database Config start -->
<resource-ref>
<description>connectDB test</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!-- Database Config end -->


下面是一下參數的必要說明:
1) description  對被引用的資源的描述。
2) res-ref-name  資源名稱。見上面的<ResourceParams name="jdbc/connectDB">
3) res-type  資源類型。見上面的<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>

在JSP中使用資源:
這是在$CATALINA_HOME/webapps/quality下的某級子目錄里的jsp網頁文件部分代碼:
<%@ page contentType="text/Html;charset=GBK"%>
<%@ page errorPage="error.jsp"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<html>
<head>
</head>
<body>
  <%

   ………………
   ………………

   // 數據庫操作
   Context ctx=null;
   Connection cnn=null;
   Statement stmt=null;
   ResultSet rs=null;
   try
   {
    ctx=new InitialContext();
    if(ctx==null)
     throw new Exception("沒有匹配的環境");
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
    if(ds==null)
     throw new Exception("沒有匹配數據庫");
    
    cnn=ds.getConnection();
    stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    rs=stmt.executeQuery("select * from table1");

    ………………
    ………………

   }
   finally
   {
    if(rs!=null)
     rs.close();
    if(stmt!=null)
     stmt.close();
    if(cnn!=null)
     cnn.close();
    if(ctx!=null)
     ctx.close();
   }
    %>
</body>
</html>


代碼說明:
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
上面這句應用了剛才設的資源。

資源使用完要釋放,尤其是Context資源,見try-catch-finally部分的finally代碼段,這是一種好的習慣。資源釋放時如果釋放了上級資源,下級資源將先被釋放。如:釋放了ctx,那么資源釋放順序將是rs,stmt,cnn,ctx。換句話說,如果釋放了ctx,那么rs,stmt和cnn都將不可用了。
這里的釋放資源只是將數據庫連接返回連接池中,并不是把資源真正釋放掉,見數據庫連接池概述。

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品av| 日韩美女免费视频| 亚洲综合视频1区| 欧美精品videos| 亚洲另类图片色| 久久综合免费视频影院| 神马久久久久久| 97成人精品区在线播放| 5278欧美一区二区三区| 91免费在线视频网站| 久久网福利资源网站| 日韩精品中文字幕在线播放| 亚洲天堂开心观看| 欧美日韩亚洲91| 欧美日韩成人网| 久久精品色欧美aⅴ一区二区| 亚洲精品电影网在线观看| 国产成人综合精品在线| 亚洲精品一区二区三区不| 日韩av在线一区二区| 国产精品欧美一区二区| 欧美中文字幕在线播放| 日韩精品福利在线| 欧美日韩在线看| 国产精品日韩欧美综合| 国产一区二区欧美日韩| 亚洲大胆人体av| 丝袜亚洲另类欧美重口| 国产精品欧美日韩久久| 欧美最近摘花xxxx摘花| 最近2019中文字幕mv免费看| 丝袜亚洲欧美日韩综合| 黑人狂躁日本妞一区二区三区| 亚洲综合精品一区二区| 91久久在线观看| 欧美视频在线免费| 成人免费网站在线| 国产精品久久久久高潮| 亚洲欧美国产日韩天堂区| 亚洲福利视频二区| 日韩精品在线观看视频| 久久久久久久久久亚洲| 色妞欧美日韩在线| 亚洲欧美日韩高清| 91香蕉亚洲精品| 欧美大片大片在线播放| 欧美精品国产精品日韩精品| 亚洲精品成人免费| 久久免费高清视频| 亚洲国产日韩欧美在线图片| 亚洲精品乱码久久久久久按摩观| 欧美孕妇孕交黑巨大网站| 国产一区红桃视频| 亚洲美女又黄又爽在线观看| 欧美日韩在线免费观看| 欧美日韩一区二区在线播放| 国产91热爆ts人妖在线| 国产ts人妖一区二区三区| 亚洲欧美日本伦理| 亚洲国内精品视频| 日韩精品在线免费观看视频| 久久噜噜噜精品国产亚洲综合| 九九热在线精品视频| 国产精品久久久久久久美男| 成人在线视频福利| 久久精品影视伊人网| 91av在线播放| 亚洲视频精品在线| 亚洲精品久久久久国产| 亚洲a级在线观看| 欧美国产在线视频| 国产精品美女无圣光视频| 色婷婷av一区二区三区在线观看| 精品视频一区在线视频| 久久久人成影片一区二区三区| 国产精品久久久久久久电影| 欧美亚洲一级片| 日韩国产激情在线| 国产精品啪视频| 中文字幕免费精品一区高清| 亚洲欧美视频在线| 精品二区三区线观看| 尤物精品国产第一福利三区| 91精品美女在线| 日韩av综合中文字幕| 国产精品日韩欧美| 精品欧美aⅴ在线网站| 欧美国产日产韩国视频| 亚洲日本aⅴ片在线观看香蕉| 久久精品国产一区二区三区| 久久夜色精品国产亚洲aⅴ| 91夜夜揉人人捏人人添红杏| 日韩精品欧美激情| 欧美区二区三区| 亚洲男人天堂网| 日韩一区视频在线| 欧美激情第一页xxx| 亚洲一级免费视频| 日韩少妇与小伙激情| 成人黄色av免费在线观看| 日本精品一区二区三区在线| 久久免费精品视频| 亚洲国产精品系列| 国产精品99蜜臀久久不卡二区| 日韩国产欧美精品一区二区三区| 久久好看免费视频| 亚洲人成电影网站色…| 久久精品人人做人人爽| 精品日韩中文字幕| 日本精品久久中文字幕佐佐木| 亚洲色无码播放| 亚洲精品视频中文字幕| 欧美激情一区二区三区成人| 欧美日韩国产成人在线观看| 亚洲bt欧美bt日本bt| 日韩av日韩在线观看| 欧美一级淫片丝袜脚交| 欧美电影第一页| 欧美国产视频一区二区| 97香蕉超级碰碰久久免费软件| 欧美日韩一区二区三区在线免费观看| 日韩欧美在线一区| 91大神在线播放精品| 久久久av免费| 亚洲精品美女视频| 久久久久成人精品| 国产精品一区二区三区在线播放| 国产午夜精品久久久| 97免费中文视频在线观看| 日韩av电影手机在线观看| 亚洲国产精品久久久| 国产999精品久久久影片官网| 国产日韩亚洲欧美| 欧美性猛交丰臀xxxxx网站| 国产精品电影在线观看| 欧美日韩性生活视频| 性欧美xxxx交| 亚洲成人aaa| 日韩中文字幕网址| 亚洲第一福利网| 亚洲视频网站在线观看| 久久久亚洲国产天美传媒修理工| 亚洲欧美另类人妖| 欧美日韩亚洲精品一区二区三区| 亚洲欧美日韩国产中文专区| 欧美多人乱p欧美4p久久| 午夜精品久久久久久99热软件| 日韩一区二区在线视频| 久久这里只有精品视频首页| 亚洲综合在线中文字幕| 日韩精品欧美激情| 欧美黑人国产人伦爽爽爽| 亚洲白虎美女被爆操| 一区二区三区黄色| 久久视频这里只有精品| 国产精品青青在线观看爽香蕉| 国产午夜精品视频| 成人深夜直播免费观看| 日韩av片免费在线观看| www.欧美三级电影.com| 欧美黑人性生活视频| 日本电影亚洲天堂| 91亚洲精品视频| 亚洲欧美日韩精品|