Как отлаживать удаленное промежуточное или производственное приложение Spring Boot
На стороне сервера
Предположим, вы успешно следовали руководству Spring Boot по настройке приложения Spring Boot как службы . Артефакт вашего приложения находится в нем /srv/my-app/my-app.war
вместе с файлом конфигурации /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
Когда вы перезапускаете приложение Spring Boot с помощью sudo service my-app restart
, в его файле журнала, расположенном по адресу, /var/log/my-app.log
должна быть строка с надписью Listening for transport dt_socket at address: 8002
.
Клиентская сторона (машина разработчика)
Открытие SSH переадресации портов туннель к серверу: ssh -L 8002:localhost:8002 myusername@staging.example.com
. Продолжайте сеанс SSH.
В Eclipse на панели инструментов выберите « Выполнить» -> « Конфигурации отладки» -> выберите « Удаленное приложение Java» -> нажмите кнопку « Создать» -> выберите « Стандартный тип подключения» ( подключение к сокету) , «Хост localhost» и «Порт 8002» (или все, что у вас есть. настроен в шагах ранее). Нажмите « Применить», а затем « Отладка» .
Теперь отладчик Eclipse должен подключиться к удаленному серверу. Переключение в перспективу отладки должно показать подключенную JVM и ее потоки. Точки останова должны срабатывать, как только они запускаются удаленно.