Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要让多个Tomcat实例使用单独的context.xml文件,我必须更改什么配置?_Java_Tomcat_Tomcat6 - Fatal编程技术网

Java 要让多个Tomcat实例使用单独的context.xml文件,我必须更改什么配置?

Java 要让多个Tomcat实例使用单独的context.xml文件,我必须更改什么配置?,java,tomcat,tomcat6,Java,Tomcat,Tomcat6,我在同一台Windows机器上设置了两个运行在不同端口上的tomcat实例。一个是阿尔法,另一个是发展。我已经在每台服务器上部署了Alpha和Dev-wars(相同的应用程序名称,在META-INF/context.xml中有不同的设置) Tomcat目录的内容完全相同,除了: 部署的war不同(我启动了新的、已删除的webapps/*war文件和目录) conf/server.xml文件不同(设置不同的端口) bin/catalina.bat文件不同(将catalina_HOME更改为每个实

我在同一台Windows机器上设置了两个运行在不同端口上的tomcat实例。一个是阿尔法,另一个是发展。我已经在每台服务器上部署了Alpha和Dev-wars(相同的应用程序名称,在META-INF/context.xml中有不同的设置)

Tomcat目录的内容完全相同,除了:

  • 部署的war不同(我启动了新的、已删除的webapps/*war文件和目录)
  • conf/server.xml文件不同(设置不同的端口)
  • bin/catalina.bat文件不同(将catalina_HOME更改为每个实例的完整路径)
其余的都一样

问题是,每个war的META-INF/context.xml文件指向不同的数据库,一个用于dev,一个用于alpha。更具体地说,连接URL不同,更具体地说,只有数据库名称不同(URL的斜杠和问号之间的字符串)

但是,在出于某种原因启动这两个实例之后,它们都指向Dev数据库。也就是说,他们可能都在读Dev context.xml,可能也在读同一个webapps/AppName文件夹

这怎么可能

当我启动Dev-tomcat时,控制台显示CATALINA_HOME、CATALINA_BASE、CATALINA_TMPDIR和CLASSPATH的值,它们都显示Dev-tomcat目录的完整路径

当我启动Alpha-tomcat时,控制台也会显示这些变量的值,它们都显示到Alpha-tomcat目录的完整路径(因此这些路径看起来是正常的)

我检查了部署的alpha_tomcat_dir/webapps/AppName/META-INF/context.xml文件,它确实显示了alpha数据库配置

但在运行时,它仍然使用Dev数据库的db信息

我还应该去哪里看

以下是context.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Context>

    <Resource name="jdbc/hng" 
        auth="Container"
        driverClassName="com.mysql.jdbc.Driver" 
        type="javax.sql.DataSource"

        maxActive="60" 
        minIdle="5"
        maxIdle="60" 
        maxWait="10000"
        testOnBorrow="true" 
        testOnReturn="true"
        testWhileIdle="true" 
        validationQuery="SELECT 1"
        timeBetweenEvictionRunsMillis="20000" 
        minEvictableIdleTimeMillis="300000"
        removeAbandoned="true" 
        removeAbandonedTimeout="180"
        logAbandoned="true"

        username="root"
        password="<removed>" 

        url="jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;autoReconnectForPools=true" />

</Context>


这些文件仅在数据库名称上有所不同。如果您100%确定上下文内容是正确的,那么dev是“hngdev”,alpha是“hngalpha”(而不是dbname)

然后我会说检查数据库服务器中的设置

可能是您在数据库服务器中创建了错误的用户?为alpha用户和dev用户提供相同的权限。也许你复制粘贴了两个相同的授权用户查询


您还可以尝试将alpha上下文中的db信息更改为错误的用户信息/端口。它还连通吗

问题在于,我在$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml中有一个context.xml文件,该文件与开发环境的相同

由于我的server.xml配置,在复制整个tomcat目录结构以创建alpha tomcat环境之前,上下文描述符曾被复制到那里。由于我的server.xml配置,它没有在新部署的应用程序上更新。数据源信息是从$CATALINA_BASE/conf/[engineame]/[hostname]/[webappname].xml读取的,这是我不知道或不希望看到的

以下是上下文和部署如何在不同服务器配置上工作的详细说明:


使用什么数据库服务器?mysql?想与我们共享您的上下文文件吗?这里有config.xml文件。我100%确定这只是db的差异,我在winmerge中检查了差异,以防我的眼睛在捉弄我。等等!当我执行像DataSource ds=(DataSource)(new InitialContext())这样的查找时。。。我查找的资源是否跨多个流程共享?它是否有可能不尝试从my context.xml构建连接池,因为有一个具有该路径的资源已经存在于另一个java进程中?是的,我实际上不需要检查数据库,因为我在两个tomcat实例中远程调试了应用程序并检查了数据源,它们都显示了相同的连接url:jdbc:mysql://127.0.0.1:3306/hngalpha?useUnicode=true&characterEncoding=UTF-8&;自动重新连接=正确&;autoReconnectForPools=True是的,你是对的,我对dev和alpha使用同一个用户,并且它被授予了对两个dbs的访问权(这是一个糟糕的做法),但问题仍然是,对于这两个实例,envCtx.lookup(“jdbc/hng”)返回一个指向dev数据库(hngdev)的数据源,尽管alpha的context.xml文件指定hngalpha作为db连接URL中的数据库,但我确实检查了您所说的,我设置了错误的用户名和密码,并且数据库名称不存在。它仍然成功地连接到dev。所以我有点确定alpha的context.xml永远不会被读取,也许整个webapp内容永远不会被使用。奇怪的是,当我启动alpha实例时,它确实扩展/部署了war