我已经在同一台Windows机器上的不同端口上设置了两个tomcat实例 . 一个用于Alpha,另一个用于开发 . 我已经将Alpha和Dev战争(相同的应用程序名称,META-INF / context.xml中的不同设置)部署到每个服务器 .
Tomcat目录具有完全相同的内容,除了:
-
部署的战争是不同的(我开始新鲜,删除了webapps / * war文件和dirs)
-
conf / server.xml文件不同(设置不同的端口)
-
bin / catalina.bat文件不同(将CATALINA_HOME更改为每个实例的完整路径)
其余的都是一样的 .
问题是每个战争的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&characterEncoding=UTF-8&autoReconnect=true&autoReconnectForPools=true" />
</Context>
这些文件仅在数据库名称上有所不同 . 它是dev的“hngdev”和alpha的“hngalpha”(而不是dbname)
2 回答
如果您100%确定上下文内容是正确的,
然后我会说检查数据库服务器中的设置 .
可能是你在数据库服务器中创建了错误的用户?给予alpha用户和开发者用户相同的权限 . 也许你复制粘贴相同的授权用户查询?
您还可以尝试将alpha上下文中的数据库信息更改为某些错误的用户信息/端口 . 它还能连接吗?
问题是我有一个context.xml文件,等于$ CATALINA_BASE / conf / [enginename] / [hostname] / [webappname] .xml中的开发环境
由于我的server.xml配置,在复制整个tomcat目录结构以创建alpha tomcat环境之前,上下文描述符曾被复制到那里 . 由于我的server.xml配置,它没有更新应用程序的新部署 . 数据源信息是从$ CATALINA_BASE / conf / [enginename] / [hostname] / [webappname] .xml中读取的,我不知道或期望 .
以下是上下文和部署如何在不同服务器配置上工作的详细说明:
http://tomcat.apache.org/tomcat-7.0-doc/config/context.html