Как отлаживать приложение Spring Boot с помощью Eclipse?

101

Мое Spring Bootвеб-приложение работает нормально, и я хотел бы отладить его через Eclipse.

Итак, какой порт мне следует прослушивать при запуске отладчика удаленного приложения Java? И есть ли в моем веб-приложении параметр, который я должен установить для включения отладки?

JeffLL
источник
В STS 3.9.4.RELEASE на Linux Mint 18 Сара Мне нужно перейти в перспективу отладки, чтобы отлаживать приложения Spring Boot.
TimeTrap 02

Ответы:

167

Почему бы вам просто не щелкнуть правой кнопкой мыши по main()методу и выбрать "Debug As... Java Application"?

Дэйв Сайер
источник
Не думал об этом. Тестирую приложение для отдыха. Запускаю его, а затем нажимаю в браузере с разными конфигурациями.
JeffLL
9
Бывают случаи, когда может потребоваться отладка приложения, запущенного удаленно на сервере, где это не применимо.
Cuga
У меня это не сработало. «Редактор не содержит основного шрифта»
Радж
Полагаю, вы тогда не «щелкали правой кнопкой мыши по методу main ()»?
Dave Syer
4
Моя ситуация была другой, Запуск Main напрямую не собирал несколько файлов конфигурации Spring, то есть bootstrap.xml, тогда мне пришлось переключиться на его запуск как maven spring -boot: run. Но проблема в том, что даже если вы запускаете эту цель maven из eclipse, она не будет отлаживать ее.
Санджай Пател
92

В Spring Boot Reference есть раздел 19.2, в котором рассказывается о запуске приложения с включенной поддержкой удаленной отладки.

$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
   -jar target/myproject-0.0.1-SNAPSHOT.jar

После запуска приложения просто добавьте эту конфигурацию удаленного Java-приложения в конфигурацию Run / Debug, выберите порт / адрес, который вы определили при запуске приложения, и затем вы можете отлаживать.

Masster
источник
Это сработало для меня. Спасибо! Eclipse не смог отладить мой проект весенней загрузки (продолжал жаловаться, что не удалось найти класс Main).
user6123723
4
Обратите внимание, что с Java 8 (я не знаю о других версиях) java -agentlib:jdwp=helpсостояние запуска «Старый интерфейс -Xrunjdwp все еще можно использовать, но он будет удален в следующем выпуске». Вместо этого используйте-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Пол
23

Более простое решение:

Вместо того, чтобы вводить mvn spring-boot:run, просто введитеmvnDebug spring-boot:run

Вам все равно нужно будет подключить отладчик в Eclipse, создав новую конфигурацию отладки для «Удаленного Java-приложения» на соответствующем порту.

Дюран Уэсли Харрис
источник
3
Как бы вы затем указали номер порта, отличный от номера по умолчанию?
Stephane
19

Мне не нужно было настраивать удаленную отладку, чтобы это работало, я использовал Maven.

  1. Убедитесь, что в Eclipse установлен плагин Maven.
  2. Щелкните Выполнить> Выполнить конфигурации> Сборка Maven> новая конфигурация запуска :
    • Базовый каталог: перейдите в корень вашего проекта
    • Цели: spring-boot::run.
  3. Щелкните Применить, затем щелкните Выполнить .

NB. Если в вашей среде IDE возникают проблемы с поиском исходного кода вашего проекта при построчной отладке, взгляните на этот ответ SO, чтобы узнать, как вручную прикрепить исходный код к приложению отладки.

Надеюсь, это кому-то поможет!

Пони пони
источник
Если вы запустите сервер с помощью spring -boot: run, вы не сможете остановить его, просто нажав красный значок в окне консоли.
Шайлеш Пратапвар
Я могу остановить это вот так (может потребоваться установка netstat, я забыл, если я использовал двоичный файл или пришел с Cygwin или частью окон): netstat -ano | grep "9999" - возвращает идентификатор задачи 36308 в Windows taskkill / F / PID 36308
armyofda12mnkeys
19

Как отлаживать удаленное промежуточное или производственное приложение 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 и ее потоки. Точки останова должны срабатывать, как только они запускаются удаленно.

Абдул
источник
Перенаправление портов и туннелирование - вот кое-что, чего мне не хватало. Та. Важно, если вы выполняете отладку на сервере в Интернете, например, на Amazon.
PaulNUK
14

Выполните команду ниже, где pom.xmlнаходится:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

И запустите удаленное Java-приложение с опцией отладки на порту5005

Арпит Аггарвал
источник
2
При этом не удается дождаться подключения отладчика Spring Boot 2.0.3.RELEASE.
Stephane
10

На мой взгляд, лучшее решение - добавить плагин в pom.xml, и вам не нужно постоянно делать что-либо еще:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9898
                    </jvmArguments>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
krmanish007
источник
Но затем команда mvn clean installзапускает отладчик и сборка зависает. Было бы круто, если mvnDebug clean installбы так делала только команда.
Стефан
1
@Stephane, эта конфигурация, вероятно, должна быть в определенном профиле, который легко включить
davidxxx
4
  • щелкните правой кнопкой мыши свой проект и выберите «Отладка как => Приложение Java или приложение для загрузки Spring» -capture1 - введите описание изображения здесь
  • Если вы хотите, чтобы ваше приложение приостанавливалось где-нибудь в вашем приложении, дважды щелкните слева, у вас будет такой снимок 2. введите описание изображения здесь
  • затем, когда вы запустите приложение, используйте эти стрелки, чтобы перейти к следующему. (снимок 3) введите описание изображения здесь
Абдельвахид Убалла
источник
Это хороший ответ на заглавный вопрос. Однако в описании есть более конкретный и другой вопрос, требующий другого ответа.
Тор Ховден
Поэтому я использовал MyEclispe, и опция Debug As -> Spring Boot App была доступна и работала нормально. Я не использую Eclipse Oxygen, и пункт меню Spring Boot App больше не доступен. Нужно ли мне устанавливать плагин для eclipse, чтобы получить это?
Kachopsticks
3

Right click on the spring boot project -> debug as -> spring boot App. Установите точку отладки и вызовите приложение из клиента, например почтальона.

Таделе Айеленн
источник
2

См. Http://java.dzone.com/articles/how-debug-remote-java-applicat, чтобы включить удаленную отладку. Если вы используете tomcat для запуска своего приложения, запустите tomcat с параметрами удаленной отладки или вы можете запустить tomcat с поддержкой JPDA, используя следующую команду.

Windows

<tomcat bin dir>/startup.bat jpda

* nix

<tomcat bin dir>/startup.sh jpda

это позволит удаленную отладку на порту 8000

Санграм Джадхав
источник
2

В eclipse или любой другой среде IDE просто щелкните правой кнопкой мыши основное приложение для загрузки Spring и выберите «Отладка как приложение Java».

Адиа
источник
2

На этот вопрос уже дан ответ, но у меня также возникла такая же проблема для отладки Springboot + gradle + jHipster,

В основном приложение загрузки Spring может отлаживать и отлаживать щелчок правой кнопкой мыши, но когда вы используете gradle, имея некоторые дополнительные настройки параметров среды, отлаживать напрямую невозможно.

Чтобы решить эту проблему, Eclipse предоставил одну дополнительную функцию в виде удаленного Java-приложения.

с помощью этих функций вы можете отлаживать свое приложение.

Следуйте шагу ниже:

запустите приложение Gradle с помощью ./gradlew bootRun --debug-jvmкоманды

Теперь перейдите в eclipse -> щелкните правой кнопкой мыши по проекту и выберите Debug configuration -> Remote Java Application.

добавьте свой хост и порт как localhost и порт как 5005 (по умолчанию для отладки gradle, вы можете изменить его)

Обратитесь к более подробной информации и шагу.

бхаратпател
источник
0

Щелкните правой кнопкой мыши файл основного класса Spring Boot Applications -> выберите параметры Debug As -> Выберите приложение Java

введите описание изображения здесь Теперь вы можете использовать точки останова для отладки приложения.

Бишал Джайсвал
источник