如何使用EclipsedebuggingSpring Boot应用程序?
我的Spring Boot
webapp运行得很好,我想通过Eclipse进行debugging。
所以当启动我的远程Java应用程序debugging器,我应该听哪个端口? 我的web应用程序有一个设置,我必须设置为启用debugging?
为什么不直接右键单击main()
方法并select"Debug As... Java Application"
?
Spring Boot Reference中的第19.2节介绍了启用远程debugging支持的应用程序。
$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \ -jar target/myproject-0.0.1-SNAPSHOT.jar
启动应用程序后,只需在运行/debuggingconfiguration中添加远程Java应用程序configuration ,select您在启动应用程序时定义的端口/地址,然后可以自由debugging。
我不需要设置远程debugging为了得到这个工作,我使用Maven。
- 确保你已经安装到Eclipse的Maven插件。
- 点击Run> Run Configurations> Maven Build> new launch configuration :
- 基本目录: 浏览到您的项目的根目录
- 目标:
spring-boot::run
。
- 单击应用,然后单击运行 。
NB。 如果您的IDE在进行逐行debugging时遇到问题,请查看此答案,以了解如何手动将源代码附加到debugging应用程序。
希望这可以帮助别人!
更简单的解决scheme
而不是键入mvn spring-boot:run
,只需键入mvnDebug spring-boot:run
您仍然需要通过在相关端口上为“远程Java应用程序”创build一个新的debuggingconfiguration来在Eclipse中附加debugging器。
在放置pom.xml
的位置运行以下命令:
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
并使用端口5005
上的debugging选项启动远程Java应用程序
如何debugging远程登台或生产Spring Boot应用程序
服务器端
假设您已经成功地遵循Spring Boot的指南,将Spring Boot应用程序设置为服务 。 您的应用程序工件驻留在/srv/my-app/my-app.war
,并附带configuration文件/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
当你使用sudo service my-app restart
重新启动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中,从工具栏中selectRun – > Debug Configurations – >selectRemote Java Application – >点击Newbutton – >selectConnection Type Standard(Socket Attach) ,作为Host localhost ,在之前的步骤中configuration)。 单击应用 ,然后debugging 。
Eclipsedebugging器现在应该连接到远程服务器。 切换到Debug透视图应显示已连接的JVM及其线程。 当它们被远程触发时,断点应该被触发。
在我看来,最好的解决scheme是在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>
请参阅http://java.dzone.com/articles/how-debug-remote-java-applicat启用远程debugging。; 如果您使用的是tomcat来运行您的应用程序,请使用远程debugging参数启动tomcat,或者使用以下命令启动带有JPDA支持的tomcat。
视窗
<tomcat bin dir>/startup.bat jpda
* nix中
<tomcat bin dir>/startup.sh jpda
这将启用端口8000上的远程debugging
使用Eclipse或任何其他IDE,只需右键单击您的主要弹簧启动应用程序,然后单击“debugging为Java应用程序”
- 在unit testing环境中重新定义Spring bean
- 获取错误org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“springSecurityFilterChain”的bean
- 在Spring中将bean引用注入Quartz作业?
- 在JUnit中使用Springtesting服务时如何回滚数据库事务?
- Spring事务和hibernate.current_session_context_class
- 用Spring Security进行unit testing
- Spring启动@ResponseBody不会序列化实体ID
- 我怎样才能有所有用户login(通过弹簧安全)我的Web应用程序的列表
- Spring @Transactional属性是否在私有方法上工作?