qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          tomcat/resin使用全局數(shù)據(jù)庫連接池資源

            我比較傾向于直接在web應用中配置數(shù)據(jù)庫連接,例如使用struts或者是Hibernate的連接池,這樣的好處是無需了解不同的應用服務器在配置數(shù)據(jù)源的差別,應用實施的時候比較簡單。
            所以我最近的一些項目都是采用這種架構,但是這種方式有一些不足的就是當應用服務器配置了多個應用,而這些應用使用同一個數(shù)據(jù)庫,這就會導致不必要的資源浪費,也就是同一個應用服務器中存在針對同一個數(shù)據(jù)庫的多個連接池。
            也就是說我們希望每個應用服務器只有一個連接池的實例,在這個應用服務器上運行的所有項目都可以使用這個連接池,下面介紹這種方式在Tomcat和Resin下的配置。
            Tomcat使用JNDI Resource來配置各種資源,包括數(shù)據(jù)庫連接池。這些Resource有兩種運行范圍,第一個就是Context級別,也就是說Context特有的Resource,該Resource只能被其所屬的Context訪問,顯然這不是我們所要的。
            另外一種就是定義全局命名資源,然后在Context中進行引用,下面是一個配置的例子(server.xml):
          <Server port="8005" shutdown="SHUTDOWN">
          <GlobalNamingResources>
          <!-- 全局有效的JDBC資源 -->
          <Resource name="jdbc/dlog" auth="Container" type="javax.sql.DataSource"
          maxActive="100" maxIdle="30" maxWait="10000" defaultTransactionIsolation="1" defaultAutoCommit="false"
          poolPreparedStatements="true" maxOpenPreparedStatements="1000" initialSize="1"
          username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/dlogcn?autoReconnect=true"/>
          </GlobalNamingResources>
          <!-- Define the Tomcat Stand-Alone Service -->
          <Service name="Catalina">
          <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
          <Connector port="8080" maxHttpHeaderSize="8192"
          maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
          enableLookups="false" redirectPort="8443" acceptCount="100"
          connectionTimeout="20000" disableUploadTimeout="true" />
          <!-- Define the top level container in our container hierarchy -->
          <Engine name="Catalina" defaultHost="localhost">
          <Host name="localhost" appBase="webapps">
          <Context path="" docBase="C:/PROJECTS/JAVA/DLOG4J_V3/webapp" reloadable="true">
          <!-- 在Context引用全局JDBC資源 -->
          <ResourceLink name="jdbc/dlog" global="jdbc/dlog"/>
          </Context>
          </Host>
          </Engine>
          </Service>
          </Server>

           相比較Tomcat來說,Resin更為簡單,在Resin2中連接池的配置如下
          <caucho.com>
          <http-server>
          <http port='80'/>
          <servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>
          <servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>
          <resource-ref res-ref-name="java:/comp/env/jdbc/dlog" res-type="javax.sql.DataSource">
          <init-param driver-name="com.mysql.jdbc.Driver"/>
          <init-param url="jdbc:mysql://localhost:3306/dlogcn?autoReconnect=true"/>
          <init-param user="root"/>
          <init-param password="moabc"/>
          <init-param maxConnections="100"/>
          </resource-ref>
          <!-- default host if no other host matches -->
          <host id=''>
          <web-app id='' app-dir='C:/PROJECTS/JAVA/DLOG4J_V3/webapp' />
          </host>
          </http-server>
          </caucho.com>
            你可以把這段配置放在web-app中,則該連接池只有對應的webapp才能訪問,放在<host>則,host中的所有web-app都可以訪問,放在<http-server>中,則整個resin的所有webapp都可以訪問。
            (實驗過程中發(fā)現(xiàn)resin2的文檔有誤,如果res-ref-name寫為jdbc/dlog,則webapp怎么都找不到這個資源,改成java:/comp/env/jdbc/dlog即可。)
            接下來我們就可以在應用中使用如下代碼來獲取連接池的DataSource實例
            Context initContext = new InitialContext();
            Context envContext  = (Context)initContext.lookup("java:/comp/env");
            DataSource ds = (DataSource)envContext.lookup("jdbc/dlog");
            其他的應用服務器的配置可以按照這個思路參考它的手冊進行配置。應該說不管是采用何種方式,性能上不會有太大的區(qū)別,如何選擇就在于你整個服務器的項目結構。
            另外從上面Tomcat和Resin的配置來看,盡管Resin的配置要簡單于Tomcat,但是靈活性和擴展性就相對要差一些

          posted on 2013-09-29 09:50 順其自然EVO 閱讀(337) 評論(0)  編輯  收藏 所屬分類: jmeter and badboy

          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宣汉县| 龙山县| 石狮市| 丰城市| 赤城县| 新巴尔虎右旗| 增城市| 淮北市| 江安县| 寻甸| 扶风县| 惠州市| 休宁县| 三穗县| 巴楚县| 嘉义县| 连云港市| 东明县| 西畴县| 合水县| 大方县| 寻乌县| 大余县| 五家渠市| 霍城县| 苍溪县| 招远市| 东乌珠穆沁旗| 集贤县| 蒙自县| 五大连池市| 读书| 永新县| 富源县| 报价| 武义县| 光山县| 苍梧县| 仲巴县| 扎囊县| 台北市|