El pozo de la variable de entorno CATALINA_HOME

Descripción del problema

La tarea de hoy es agregar una interfaz a un servicio web para que otro servicio web acceda a través de Http.
El IDE utilizado es IDEA, y no he descubierto cómo iniciar dos servicios web al mismo tiempo en IDEA para la depuración (y estos dos servicios web pertenecen a dos módulos del mismo proyecto). Por lo tanto, el método adoptado es ajustar por separado la publicación y la depuración conjunta. Los pasos son los siguientes:
-Iniciar el servicio A que proporciona la interfaz en el IDE, acceder directamente a la URL correspondiente a través del navegador y depurar la interfaz de A service;
-Publicar en el Tomcat local el Servicio A, e iniciar Tomcat;
-Iniciar el servicio B llamando a la interfaz en el IDE, y acceder a la interfaz del Servicio A en Tomcat.


Parece que no debería haber ningún problema. Sin embargo, han aparecido cosas extrañas:
-El servicio B indica 404 NOT FOUND cuando se llama; -Acceso a
la interfaz del servicio A directamente en el navegador también 404 NOT FOUND;
-Reiniciando el servicio A en IDEA, interfaz de acceso, no hay problema;
-vuelva a publicarlo, sigue siendo 404; -acceder a
una interfaz antigua del servicio A en el navegador es normal ...

identificar el problema

Es imposible, así que debe haber algo mal.
Desde la perspectiva del problema, la nueva interfaz 404 y la antigua interfaz 200. ¡Parece que falta la nueva interfaz!
Cuando se inicia en IDEA, el puerto de servicio es el puerto 8080 predeterminado de Tomcat. Cuando se inicia en un Tomcat independiente, el puerto se cambia a 8088.
Dado que la nueva interfaz no se encuentra en absoluto, no hay ningún registro para localizar el problema.
Frente a la ventana de línea de comandos de Tomcat durante mucho tiempo, de repente descubrí: ¿Por qué este Tomcat inicia el puerto 8099? ? ?
8099 es el puerto de acceso proporcionado para la prueba anterior, y se configuran las reglas de entrada y salida.
¡Pero obviamente cambié el puerto a 8088!

Aquí hay una explicación: debido al cambio de proyecto, hay cuatro o cinco copias de Tomcat en esta máquina; dos de ellas son la versión 9.0 y tres son la versión 8.0 (hay un problema con la versión 9.0 del control comprado). Un Tomcat9.0 se utiliza para el uso integrado de IDEA y el otro Tomcat9.0 proporciona acceso de prueba. Los tres 8.0 restantes se agregan recientemente, y los nuevos servicios se configuran en estos Tomcats de 8.0.
Escriba la descripción de la imagen aquí

En este momento, entiendo un poco. Aunque el comando de inicio de Tomcat llama a startup.bat en 8.0, en realidad inicia startup.bat en 9.0. Da la casualidad de que el servicio A también se implementa en este 9.0, pero es una versión antigua del servicio A (hay una interfaz antigua y la nueva interfaz definitivamente no está allí).
En cuanto a por qué el Tomcat en 9.0 se inicia desde el bat batch en 8.0, es necesario encontrar el motivo en las variables de entorno.
Cuando se instaló Tomcat por primera vez, para facilitar el inicio, se configuró la variable de entorno CATALINA_HOME, y fue esta variable de entorno la que causó este error coincidente.

Pregunte el resultado final

   rem Adivina CATALINA_HOME si no está definido
    establecer "CURRENT_DIR =% cd%"
    si no "% CATALINA_HOME%" == "" ir a gotHome
    establecer "CATALINA_HOME =% CURRENT_DIR%"
    si existe "% CATALINA_HOME% \ bin \ catalina.bat" ir a okHome
    cd ..
    set "CATALINA_HOME =% cd%"
    cd "% CURRENT_DIR%"
    : gotHome
    si existe "% CATALINA_HOME% \ bin \ catalina.bat" goto okHome
    echo La variable de entorno CATALINA_HOME no está definida correctamente
    echo Esta variable de entorno es necesaria para ejecutar este programa
    goto end
    : okHome

    establecer "EJECUTABLE =% CATALINA_HOME% \ bin \ catalina.bat"

    rem Verifique que el ejecutable de destino exista
    si existe "% EXECUTABLE%" goto okExec
    echo No se puede encontrar "% EXECUTABLE%"
    echo Este archivo es necesario para ejecutar este programa
    goto end
    : okExec

    rem Obtenga los argumentos restantes de la línea de comando sin
    cambiar y guárdelos en el conjunto CMD_LINE_ARGS =
    : setArgs
    if ""% 1 "" == "" "" goto doneSetArgs
    set CMD_LINE_ARGS =% CMD_LINE_ARGS%% 1
    shift
    goto setArgs
    : doneSetArgs

    llamar "% EXECUTABLE%" start% CMD_LINE_ARGS%

    :fin

Lo anterior es un fragmento de código en el comando por lotes startup.bat, traducido aproximadamente:
1. Si la variable de entorno CATALINA_HOME no está definida, configure la variable de entorno CATALINA_HOM en el directorio de inicio del archivo bat (aquí está el directorio actual);
2. Si CATALINA_HOME no lo es Si está vacío, juzgue si hay% CATALINA_HOME% \ bin \ catalina.bat (es decir, busque otro archivo por lotes en el directorio bin, catalina.bat); de lo contrario, establezca CATALINA_HOME en el directorio actual y continúe buscando catalina.bat;
3. Ejecute catalina.bat para iniciar tomcat;
para que pueda entender que si la variable de entorno CATALINA_HOME está configurada, sin importar desde qué tomat startup.bat se inicie, catalina.bat en el directorio correspondiente a se encontrará la variable de entorno para iniciar el tomcat correspondiente.

Solución

La solución es: eliminar la variable de entorno CATALINA_HOME y dejar que cada Tomcat se inicie directamente desde el directorio donde se encuentra startup.bat.

Mirando hacia atrás en el surgimiento de todo el problema, tengo que decir algo que es un poco coincidente. Sin embargo, hay que decir que cuando Tomcat se configuró inicialmente, se siguió mecánicamente los pasos en Internet y no entendí el significado detrás de esto. Tómese su tiempo para estudiar catalina.bat para ver qué ha hecho este lote.

 

Fuente original: https://blog.csdn.net/achang07/article/details/77765533

Supongo que te gusta

Origin blog.csdn.net/dgxin_605/article/details/81091228
Recomendado
Clasificación