我有两个 Tomcat 服务器作为 Windows 服务在一台机器上运行,每个都安装在不同的硬盘上并使用不同的端口。 每个 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&useEncoding=true&characterEncoding=UTF-8/>"
Tomcat2
<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/monitorbeta
autoReconnect=true&useEncoding=true&characterEncoding=UTF-8/>"
以非常标准的方式调用代码中的初始上下文(在两个服务器上的所有 servlet 中):
InitialContext context = new InitialContext();
DataSource datasource = (DataSource) context.lookup("java:/comp/env/jdbc/monitor");
Connection connection = datasource.getConnection();
return connection;
问题是在 Tomcat2 上,其中一个 servlet 从 Tomcat1 context.xml 获取连接(因此更新了错误的表)——而其他 servlet“进入”正确的上下文! 我重新启动了服务,确保 Tomcat 使用其他端口并且 catalina home/base 在 Tomcat2 上正确设置。我想念什么?
编辑: 另外,我试图像这样手动将环境设置为 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 处理程序上,它明确地超出了初始上下文定义...
关于java - InitialContext.lookup 从错误的 context.xml 中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883588/