Como depurar um aplicativo Spring Boot de produção ou teste remoto
Lado do servidor
Vamos supor que você seguiu com sucesso o guia do Spring Boot sobre a configuração de seu aplicativo Spring Boot como um serviço . O artefato do seu aplicativo reside em /srv/my-app/my-app.war
, acompanhado de um arquivo de configuração /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
Ao reiniciar seu aplicativo Spring Boot com sudo service my-app restart
, então em seu arquivo de log localizado em /var/log/my-app.log
deve haver uma linha dizendo Listening for transport dt_socket at address: 8002
.
Lado do cliente (máquina de desenvolvedor)
Abrir um túnel port-forwarding SSH para o servidor: ssh -L 8002:localhost:8002 myusername@staging.example.com
. Mantenha esta sessão SSH em execução.
No Eclipse, na barra de ferramentas, selecione Executar -> Configurações de depuração -> selecione Aplicativo Java Remoto -> clique no botão Novo -> selecione como Tipo de Conexão Padrão (Conexão de Soquete) , como Host localhost e como Porta 8002 (ou o que você tiver configurada nas etapas anteriores). Clique em Aplicar e em Depurar .
O depurador Eclipse agora deve se conectar ao servidor remoto. Mudar para a perspectiva Debug deve mostrar a JVM conectada e seus encadeamentos. Os pontos de interrupção devem ser acionados assim que forem acionados remotamente.