如何从不同目录正确启动2个Tomcat服务器?

时间:2016-08-22 05:18:55

标签: java tomcat7

我在不同的目录D和E中有2个Tomcat服务器。我想同时启动这些服务器。

我做了什么:

第一种方法:

1)通过阅读各种网站,我发现我改变了tomcat的端口号。

2)在我的Catalina_Home文件夹中,我的路径值为CATALINA_HOME = D:\ tomcat \ apache-tomcat-7.0.70。

当我从驱动器E启动Tomcat时,我在驱动器E的Tomcat中出现错误

INFO: Server startup in 105794 ms
Aug 22, 2016 10:37:29 AM org.apache.catalina.core.StandardServer await
SEVERE: StandardServer.await: create[localhost:8005]:
java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
    at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
    at java.net.PlainSocketImpl.bind(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
  at org.apache.catalina.core.StandardServer.await(StandardServer.java:444)
    at org.apache.catalina.startup.Catalina.await(Catalina.java:781)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:727)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)

Aug 22, 2016 10:37:29 AM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-apr-8080"]
Aug 22, 2016 10:37:29 AM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-apr-8009"]
Aug 22, 2016 10:37:29 AM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Aug 22, 2016 10:37:29 AM org.apache.catalina.loader.WebappClassLoaderBase  clear ReferencesThreads
SEVERE: The web application [/Subs_Engine] appears to have started a thread name
d [Abandoned connection cleanup thread] but has failed to stop it. This is  very
likely to create a memory 

第二种方法:

如上所述,我在cmdPrompt中为E Drive中定义的tomcat尝试了以下内容

@Edit    enter image description here 我得到以下提示

enter image description here

第三种方法:

a)我已验证的端口号。它们在服务器的每个目录中都不同。

b)我已经打开了startup.bat并用CATALINA_HOME_E替换了CATALINA_HOME。

c)我已将系统和用户定义的环境变量中的CATALINA_HOME_E设置为E:\ apache-tomcat-7.0.70。

在系统变量中,我添加的路径变量是%CATALINA_HOME_E%\ lib;

现在tomcat开始了,但我收到了错误:

INFO: Server startup in 105794 ms
Aug 22, 2016 10:37:29 AM org.apache.catalina.core.StandardServer await
SEVERE: StandardServer.await: create[localhost:8005]:
java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
    at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
    at java.net.PlainSocketImpl.bind(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
  at org.apache.catalina.core.StandardServer.await(StandardServer.java:444)
    at org.apache.catalina.startup.Catalina.await(Catalina.java:781)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:727)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)

我看到这个错误的原因是我从E盘开始的Tomcat是从D盘开始的。 我看到我运行Tomcat的端口,使用&gt; netstat -ano |找到“:7080”,这是7080的http:

我没有找到任何正在运行的东西。 所以,我已经错误地配置了路径设置。

  

我是否正确地采用这种方法?

     

任何人都可以指导我为什么要纠正这个问题?

3 个答案:

答案 0 :(得分:2)

以下是您应该尝试的内容

a)为两个tomcat实例设置不同的端口。这是通过编辑server.xml并确保没有端口冲突来完成的。在端口选择中确保没有“其他”应用程序正在侦听(不同的应用程序允许在8085上监听 - 例如非tomcat)

b)不要为startServer.bat设置全局路径,也不要在命令行或用户配置文件中同时使用startServer.bat。每次在命令行上启动startServer时,都要确保在那里设置路径。既然你提到D和E,我就假设这里有窗户。

在命令行上

a)cd ... b)SET CATALINA_HOME = D:... \ TomcatOnD \ c)SET PATH =%PATH%; D:... \ TomcatOnD \ bin d)startServer.bat

做同样的事情,在E:\

上使用不同的tomcat路径

查看服务器是否启动。希望他们应该:)

答案 1 :(得分:2)

你需要做的是

  1. 为第二台服务器使用不同的端口
  2. 为第二台服务器使用不同的catalina
  3. 我将按原样离开第一个tomcat,D: 我们要改变的是E:

    1-为安装在E上的tomcat打开conf / server.xml: 找到名为Connector的端口配置元素(标记)将端口更改为任何未使用的端口,例如ex 9090

    <Connector port="9090" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    

    确保D:上的那个也不使用相同的端口。

    2-打开E:上安装的服务器的bin / startup.bat,并将所有CATALINA_HOME替换为CATALINA_HOME_E,如果需要,可以使用不同的名称。

    3-添加新的系统环境密钥CATALINA_HOME_E,使其指向E:\apache-tomcat-7.0.70\bin

    现在您可以使用E:\apache-tomcat-7.0.70\binD:\apache-tomcat-7.0.70\bin上的startup.bat文件启动这两个服务器

    几年前我在Windows上使用过这种方法,虽然最近没有测试过。但我认为它仍然可以使用

    请不要将E:\ apache-tomcat-7.0.70 \ bin或D:\ apache-tomcat-7.0.70 \ bin添加到PATH ,如果这样做,您在cmd中键入启动它可能会启动相同的实例两次。而是导航到该文件夹​​并启动bat文件

    如果您需要添加到PATH,则需要重命名启动文件,因此它们会像这样结束 startupd.batstartupe.bat因此,使用命令启动服务器时不会发生混音。

    修改 根据您对此方法的反馈 tomcat使用连接-i认为它用于某些内部信令和通信,可能是将关机信号发送到服务器?! 默认情况下位于端口8005上 你需要在E:tomcat上设置一个新端口,它位于server.xml conf文件中 标记SERVER <Server port="8005" shutdown="SHUTDOWN"设置了一个新端口,可能是8006

答案 2 :(得分:1)

检查配置文件server.xml
在中定义的端口 <Connector connectionTimeout="20000" port="9090" protocol="HTTP/1.1" redirectPort="8443"/>

<Connector port="9009" protocol="AJP/1.3" redirectPort="8443"/>

对于每个tomcat实例应该是不同的。