使用IDEA對SpringBoot應用進行遠程調(diào)試方式
情境描述
有時候,應用開發(fā)完成發(fā)布到服務(wù)器時出現(xiàn)異常,但本地卻無法復現(xiàn),也無法通過服務(wù)器上的日志定位。
此時可以通過IDEA對部署在服務(wù)器上的SpringBoot應用進行遠程調(diào)試。
環(huán)境描述
- 遠程服務(wù)器: CentOS 7
- 語言環(huán)境:JDK 1.8
- SpringBoot版本:2.3.4.RELEASE
- IDEA版本:2020.2
操作步驟
測試應用編寫與發(fā)布
本地使用IDEA寫一個簡單的SpringBoot web應用,開放一個接口,代碼如下:
package com.example.remoteapp.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @Author UV * @Version 0.1 * @Data 2020/9/29 * @Description */ @RestController public class OpenController { @GetMapping("/hello") public void hello() { System.out.println("此處是斷點"); System.out.println("此處是正常業(yè)務(wù)內(nèi)容"); } }
使用mvn install將應用打成jar包,上傳到服務(wù)器上。
IDEA遠程調(diào)試配置
打開項目配置
添加遠程應用
設(shè)置遠程應用名、debugger模式(Debugger mode)、配置遠程服務(wù)器地址(Host)、端口(Port)、應用模塊(Use module classpath)
此處的Port為遠程應用的遠程調(diào)試端口,不是應用本身的業(yè)務(wù)訪問端口。
配置完成后,復制下圖中的參數(shù),作為遠程應用的啟動參數(shù)
啟動遠程應用
登陸服務(wù)器,啟動jar包
$ java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar remoteapp-0.0.1-SNAPSHOT.jar
Listening for transport dt_socket at address: 5005. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.4.RELEASE)2020-09-29 02:20:47.247 INFO 798 --- [ main] c.e.remoteapp.RemoteappApplication : Starting RemoteappApplication v0.0.1-SNAPSHOT on migration-plat01.novalocal with PID 798 (/root/remoteapp-0.0.1-SNAPSHOT.jar started by root in /root)
2020-09-29 02:20:47.252 INFO 798 --- [ main] c.e.remoteapp.RemoteappApplication : No active profile set, falling back to default profiles: default
2020-09-29 02:20:49.000 INFO 798 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2020-09-29 02:20:49.024 INFO 798 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-09-29 02:20:49.024 INFO 798 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.38]
2020-09-29 02:20:49.120 INFO 798 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2020-09-29 02:20:49.121 INFO 798 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1773 ms
2020-09-29 02:20:49.428 INFO 798 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-09-29 02:20:49.697 INFO 798 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-09-29 02:20:49.712 INFO 798 --- [ main] c.e.remoteapp.RemoteappApplication : Started RemoteappApplication in 3.297 seconds (JVM running for 3.953)
2020-09-29 02:21:54.307 INFO 798 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-09-29 02:21:54.307 INFO 798 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-09-29 02:21:54.318 INFO 798 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 11 ms
此處是斷點
此處是正常業(yè)務(wù)內(nèi)容
Listening for transport dt_socket at address: 5005
此時可以在日志第一行看到Listening for transport dt_socket at address: 5005
證明遠程調(diào)試接口配置成功。
本地使用IDEA對遠程應用進行調(diào)試
在IDEA中打一個斷點,開啟debug
訪問遠程測試接口
注意點
- 遠程調(diào)試端口一定要跟應用的業(yè)務(wù)端口不一致,否則會因為端口沖突導致應用無法啟動
- 本地代碼要與遠程代碼一致,否則調(diào)試過程會出現(xiàn)異常
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea2019版與maven3.6.2版本不兼容的解決方法
這篇文章主要介紹了idea2019版與maven3.6.2版本不兼容的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10集合框架及背后的數(shù)據(jù)結(jié)構(gòu)
本文主要介紹了Java的集合框架Java?Collection?Framework,接口interface以及背后的數(shù)據(jù)結(jié)構(gòu),感興趣的同學可以閱讀參考2023-03-03SpringBoot中實現(xiàn)文件上傳、下載、刪除功能的步驟
本文將詳細介紹如何在 Spring Boot 中實現(xiàn)文件上傳、下載、刪除功能,采用的技術(shù)框架包括:Spring Boot 2.4.2、Spring MVC、MyBatis 3.5.6、Druid 數(shù)據(jù)源、JUnit 5 等,文中有詳細的操作步驟和示例代碼供大家參考,需要的朋友可以參考下2024-01-01揭秘SpringBoot!一分鐘教你實現(xiàn)配置的動態(tài)神刷新
在今天的指南中,我們將深入探索SpringBoot?動態(tài)刷新的強大功能,讓你的應用保持最新鮮的狀態(tài),想象一下,無需重啟,你的應用就能實時更新配置,是不是很酷?跟我一起,讓我們揭開這項技術(shù)如何讓開發(fā)變得更加靈活和高效的秘密吧!2024-03-03