我在一台计算机上运行两台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&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/>"
在代码中调用Initial上下文(在两台服务器上的所有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则“转向”正确的上下文! 我重新启动了服务,确保Tomcats使用其他端口,并且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);
仍然没有成功
答案 0 :(得分:0)
问题在于我的JDBC处理程序,它明确地溢出了Initial上下文定义......