Cómo depurar una aplicación Spring Boot de producción o puesta en escena remota
Lado del servidor
Supongamos que ha seguido con éxito la guía de Spring Boot para configurar su aplicación Spring Boot como servicio . El artefacto de su aplicación reside en /srv/my-app/my-app.war
, acompañado de un archivo de configuración /srv/my-app/my-app.conf
:
# This is file my-app.conf
# What can you do in this .conf file? The my-app.war is prepended with a SysV init.d script
# (yes, take a look into the war file with a text editor). As my-app.war is symlinked in the init.d directory, that init.d script
# gets executed. One of its step is actually `source`ing this .conf file. Therefore we can do anything in this .conf file that
# we can also do in a regular shell script.
JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=localhost:8002,server=y,suspend=n"
export SPRING_PROFILES_ACTIVE=staging
Cuando reinicie su aplicación Spring Boot con sudo service my-app restart
, entonces en su archivo de registro ubicado en /var/log/my-app.log
debería haber una línea que diga Listening for transport dt_socket at address: 8002
.
Lado del cliente (máquina de desarrollador)
Abrir una redirección de puertos SSH túnel para el servidor: ssh -L 8002:localhost:8002 myusername@staging.example.com
. Mantenga esta sesión SSH en ejecución.
En Eclipse, desde la barra de herramientas, seleccione Ejecutar -> Configuraciones de depuración -> seleccione Aplicación Java remota -> haga clic en el botón Nuevo -> seleccione como Tipo de conexión Estándar (Conexión de socket) , como Host localhost y como Puerto 8002 (o lo que tenga configurado en los pasos anteriores). Haga clic en Aplicar y luego en Depurar .
El depurador de Eclipse ahora debería conectarse al servidor remoto. El cambio a la perspectiva de depuración debería mostrar la JVM conectada y sus subprocesos. Los puntos de interrupción deben activarse tan pronto como se activen de forma remota.