代码之家  ›  专栏  ›  技术社区  ›  Scott Bonner

Tomcat JDBC连接池在实例之间共享吗?

  •  4
  • Scott Bonner  · 技术社区  · 16 年前

    我们现在有了一个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,而不是唯一的名称,那么是否有可能发生数据库交叉,即在另一个客户的数据库中有一个客户,或者这些客户是本地化到特定的部署实例上的?

    思想? 谢谢, 斯科特

    4 回复  |  直到 16 年前
        1
  •  4
  •   erickson    16 年前

    不可以。数据源名称的作用域是一个Tomcat实例。

    如果您要为每个客户启动一个单独的Tomcat进程,那么最重要的是如何配置数据源,而不是Tomcat所称的数据源。只要将每个数据源配置为使用不同的数据库,就不会有任何串扰。

        2
  •  3
  •   ZZ Coder    16 年前

    这取决于您如何为每个客户机部署应用程序,

    1. 如果每个客户机都有自己的Tomcat安装(他们有不同的Catalina_主页),就没有机会让它通过。
    2. 如果它们都使用相同的安装,但在Tomcat中作为不同的主机运行,那么您需要确保没有在conf/context.xml中定义数据源,该数据源由所有主机共享。
    3. 如果所有客户机共享相同的Tomcat实例,而它们只是不同的Web应用程序,则需要更多的关注。您需要在META-INF/context.xml或WEB-INF/WEB.xml中定义数据源。为了进一步隔离,您应该将dbcp.jar复制到每个应用程序的WEB-INF/lib,以便它们使用自己的dbcp实例。
        3
  •  1
  •   ColinD    16 年前

    如果你在定义JNDI DataSource 资源在应用程序部署的上下文中,我相信您甚至可以在同一个Tomcat实例中运行同一应用程序的多个副本,并使用相同的JNDI名称访问不同的数据库。如果每个应用程序实例完全运行在Tomcat的不同实例中,那么一个实例肯定不会引用为另一个实例指定的数据库。

        4
  •  0
  •   vikas    16 年前

    不,因为数据源名称的作用域是一个Tomcat实例,并且您可以在单个Tomcat实例中拥有多个数据源,所以不存在数据库交叉的可能性。只要数据源不同,就不会有数据库交叉的机会……