簡體   English   中英

Tomcat JDBC連接池是否在實例之間共享?

[英]Do Tomcat JDBC Connection pools get shared between instances?

我們現在有一個Web應用程序,我們為每個客戶端部署一個副本。 我們當前的部署策略是為每個實例創建一個唯一命名的jdbc連接池。 所以說jdbc / client。 它們被指定為......

< Context path="/"
        reloadable="true"
        docBase="\home\client\ROOT"
        debug="5" >
        < Resource name="jdbc/client"
                auth="Container"
                type="javax.sql.DataSource"
                maxActive="100"
                maxIdle="30"
                validationQuery="SELECT 1"
                testWhileIdle="true"
                timeBetweenEvictionRunsMillis="300000"
                numTestsPerEvictionRun="6"
                minEvictableIdleTimeMillis="1800000"
                maxWait="10000"
                username="user"
                password="pass"
                driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://databaseserver:3306/client ?zeroDateTimeBehavior=convertToNull&amp;jdbcCompliantTruncation=false"/>
< /Context>

問題是,如果我要對其進行標准化,以便在所有已部署的實例上將連接池稱為jdbc / database而不是唯一的名稱,是否存在數據庫交叉的可能性,即另一個客戶的數據庫中的一個客戶,或者這些是本地化的特定部署的實例?

思考? 謝謝,斯科特

不可以。數據源名稱的范圍是一個Tomcat實例。

如果要為每個客戶啟動單獨的Tomcat進程,那么重要的是數據源的配置方式,而不是Tomcat所稱的方式。 只要每個數據源配置為使用不同的數據庫,就不會有任何串擾。

這取決於您為每個客戶端部署應用程序的方式,

  1. 如果每個客戶端都有自己的Tomcat安裝(它們具有不同的CATALINA_HOME),則它沒有機會進行交叉。
  2. 如果它們都使用相同的安裝但在Tomcat中作為不同的主機運行,則需要確保不在conf / context.xml中定義數據源,該數據源由所有主機共享。
  3. 如果所有客戶端共享相同的Tomcat實例,並且它們只是不同的Web應用程序,則需要更多關注。 您需要在META-INF / context.xml或WEB-INF / web.xml中定義數據源。 為了進一步隔離,您應該將dbcp.jar復制到每個應用程序的WEB-INF / lib,以便它們使用自己的DBCP實例。

如果您要在Context中為應用程序的部署定義JNDI DataSource資源,我相信您甚至可以在同一個Tomcat實例中運行相同應用程序的多個副本,並使用相同的JNDI名稱來訪問不同的數據庫。 如果每個應用程序實例完全在不同的Tomcat實例中運行,那么一個實例肯定無法引用為另一個實例指定的數據庫。

沒有數據庫交叉的機會becoz數據源名稱的范圍是一個Tomcat實例,你可以在單個tomcat實例中有多個數據源....所以只要數據源不同就沒有數據庫交叉的可能性.....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM