Java InitialContext.lookup从错误的context.xml获取数据

Java InitialContext.lookup从错误的context.xml获取数据,java,tomcat,jakarta-ee,servlets,Java,Tomcat,Jakarta Ee,Servlets,我有两个Tomcat服务器作为Windows服务运行在一台机器上,每个服务器安装在不同的HD中,使用不同的端口。 每个Tomcat在其context.xml到JDBC驱动程序中保存数据源引用(两个连接都指向同一个MySql服务器,但不同的数据库): Tomcat1: <Resource name="jdbc/monitor" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="

我有两个Tomcat服务器作为Windows服务运行在一台机器上,每个服务器安装在不同的HD中,使用不同的端口。 每个Tomcat在其context.xml到JDBC驱动程序中保存数据源引用(两个连接都指向同一个MySql服务器,但不同的数据库):

Tomcat1:

<Resource name="jdbc/monitor" auth="Container" type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="user" password="password"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/monitor
autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8/>"
问题是,在Tomcat2上,一个servlet从Tomcat1 context.xml获取连接(因此更新了错误的表),而另一个servlet“转到”了正确的上下文!! 我重新启动了服务,确保Tomcats使用其他端口,并且catalina home/base设置在Tomcat2上。我错过了什么

编辑: 此外,我还尝试手动将Enviroment设置为InitialContext,如下所示:

env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.rmi.registry.RegistryContextFactory");
env.put(Context.PROVIDER_URL,"rmi://localhost:9080");
Context ctx = new InitialContext(env);

但是,没有成功

问题在于我的JDBC处理程序,它显式地超出了初始上下文定义…

您是否已将Tomcat2 Initialcontext配置为在新端口号处查找命名提供程序?否则它将使用默认端口号,这里是在Tomcat1上运行的端口号。您可以通过
java.naming.provider.url
属性进行设置。@AlexanderLanger您的意思是添加-d java.naming.provider.url=//localhost:XXXX到java选项吗?不,您可以将这些选项传递到
InitialContext
,例如,@AlexanderLanger查看我的编辑,仍然指向错误的上下文端口9080看起来不熟悉,默认端口为1099;当然,对于tomcat2实例,您必须指定在tomcat2服务器配置中使用的端口号,该端口号必须与tomcat1端口号不同。你试过了吗?
InitialContext context = new InitialContext();
DataSource datasource = (DataSource) context.lookup("java:/comp/env/jdbc/monitor");
Connection connection = datasource.getConnection();            
return connection;
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.rmi.registry.RegistryContextFactory");
env.put(Context.PROVIDER_URL,"rmi://localhost:9080");
Context ctx = new InitialContext(env);