技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁 > 教程 > 服務(wù)器類 >

Tomcat數(shù)據(jù)庫連接池的配置方法總結(jié)

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2019-03-31 18:14┆點(diǎn)擊:

數(shù)據(jù)庫連接是一種關(guān)鍵的有限的昂貴的資源,這在多用戶網(wǎng)頁應(yīng)用程序中體現(xiàn)的尤為突出.對數(shù)據(jù)庫連接的管理能顯著影響到整個應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo),數(shù)據(jù)庫連接池正是針對這個問題提出的.

數(shù)據(jù)庫連接池負(fù)責(zé)分配,管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個;釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因?yàn)闆]有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏,這樣可以明顯提高對數(shù)據(jù)庫操作的性能.

數(shù)據(jù)庫連接池在初始化的時將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫連接放到連接池中,這些數(shù)據(jù)庫連接的數(shù)量是又最小數(shù)據(jù)庫連接數(shù)來設(shè)定的,無論這些數(shù)據(jù)庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù),當(dāng)應(yīng)用程序向連接池請求的連接數(shù)超過最大連接數(shù)量時,這些請求將被加入到等待隊(duì)列中.

數(shù)據(jù)庫連接池的最小連接數(shù)和最大連接數(shù)的設(shè)置要考慮到下列幾個因素:

1.最小連接數(shù)是連接池一直保持的數(shù)據(jù)庫連接,所以如果應(yīng)用程序?qū)?shù)據(jù)庫連接的使用量不大,將會有大量的數(shù)據(jù)庫連接資源被浪費(fèi).

2.最大連接數(shù)是連接池申請的最大連接數(shù),如果數(shù)據(jù)庫連接請求超過次數(shù),后面的數(shù)據(jù)庫連接請求將被加入到等待對了中,這回影響之后的數(shù)據(jù)庫操作

如果最小連接數(shù)與最大連接數(shù)相差太大,那么最先的連接請求將會獲利,之后超過最小連接數(shù)量的連接請求等價于建立一個新的數(shù)據(jù)庫連接,不過,這些小于最小連接數(shù)的數(shù)據(jù)庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復(fù)使用或是空閑超時被釋放.

實(shí)例使用的Tomcat版本為6.0

方法一: 在Tomcat的conf/context.xml中配置
在Tomcatapache-tomcat-6.0.33conf目錄下的context.xml文件中配置默認(rèn)值如下:

<?xml version='1.0' encoding='utf-8'?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> </Context>

配置連接池:

<?xml version='1.0' encoding='utf-8'?>
 

<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!--配置oracle數(shù)據(jù)庫的連接池--> <Resource name="jdbc/oracleds" author="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="scott" password="tiger" driverClassName="oracle.jdbc.dirver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:ora9" /> <!--配置mysql數(shù)據(jù)庫的連接池, 需要做的額外步驟是將mysql的Java驅(qū)動類放到tomcat的lib目錄下 maxIdle 連接池中最多可空閑maxIdle個連接 minIdle 連接池中最少空閑maxIdle個連接 initialSize 初始化連接數(shù)目 maxWait 連接池中連接用完時,新的請求等待時間,毫秒 username 數(shù)據(jù)庫用戶名 password 數(shù)據(jù)庫密碼 --> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" /> </Context>

配置好后需要注意的兩個步驟
 

1.將對應(yīng)數(shù)據(jù)庫的驅(qū)動類放到tomcat的lib目錄西安

2.重新啟動tomcat服務(wù)器,讓配置生效

在web應(yīng)用程序的web.xml中設(shè)置數(shù)據(jù)源參考,如下:

在<web-app></web-app>節(jié)點(diǎn)中加入下面內(nèi)容

<resource-ref>
 

<description>mysql數(shù)據(jù)庫連接池</description> <!-- 參考數(shù)據(jù)源名字,同Tomcat中配置的Resource節(jié)點(diǎn)中name屬性值"jdbc/mysqlds"一致 --> <res-ref-name>jdbc/mysqlds</res-ref-name> <!-- 資源類型 --> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>

錯誤解決:
 

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
 

at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325) at javax.naming.InitialContext.lookup(InitialContext.java:392) at com.iblog.util.DBPoolUtil.<clinit>(DBPoolUtil.java:34)

解決方案:
 

上面的異常信息是配置文件中JNDI沒有初始化造成的

如果下面的問題都不存在