springboot使用IDEA遠程Debug
項目上線之后,如果日志打印的很模糊或者業務邏輯比較復雜,有時候無法定位具體的錯誤原因,因此可以通過IDEA遠程代理進行Debug。
線上的代碼一定要和本地的一致!
環境:
2.1.4.RELEASE(org.springframework.boot) jdk1.8 Apache Maven 3.5.0 1、先創建一個準備遠程調試的Demo,注意構建項目的配置<?xml version='1.0' encoding='UTF-8'?><project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd'><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.remote.test</groupId><artifactId>remote_test</artifactId><version>0.0.1-SNAPSHOT</version><name>remote_test</name><description>Demo project for Spring Boot</description> <properties><java.version>1.8</java.version></properties> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>RELEASE</version><scope>test</scope></dependency></dependencies> <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.2</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.4.RELEASE</version></dependency></dependencies><configuration><keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope><createDependencyReducedPom>false</createDependencyReducedPom><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><finalName>${project.artifactId}-${project.version}-all</finalName><transformers><transformer implementation='org.apache.maven.plugins.shade.resource.AppendingTransformer'><resource>META-INF/spring.handlers</resource></transformer><transformer implementation='org.springframework.boot.maven.PropertiesMergingResourceTransformer'><resource>META-INF/spring.factories</resource></transformer><transformer implementation='org.apache.maven.plugins.shade.resource.AppendingTransformer'><resource>META-INF/spring.schemas</resource></transformer><transformer implementation='org.apache.maven.plugins.shade.resource.ServicesResourceTransformer'/><transformer implementation='org.apache.maven.plugins.shade.resource.ManifestResourceTransformer'><!--根據項目的全名指定啟動類--> <mainClass>com.remote.test.remote_test.RemoteTestApplication</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build></project>
package com.remote.test.remote_test; import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;import java.util.Map; @RestController@RequestMapping('remote/test')public class UserController { private static final Logger logger = LoggerFactory.getLogger(UserController.class); @PostMapping('selectByUserId') public String selectUserInfo(@RequestParam('userId') String userId) {try { Map<String,Object> userInfo = new HashMap<>(); userInfo.put('userId',userId); userInfo.put('age',23); userInfo.put('name','yanshao'); userInfo.put('address','shanghai'); logger.info('Query user information by user ID. userInfo: {}',userInfo.toString()); return this.success(userInfo);} catch (Exception e) { logger.error('Query user information by user ID. userId:{} ', userId, e); return this.fail();} } private String success(Object data){Map<String,Object> res = new HashMap<>();res.put('code',0);res.put('desc','success');res.put('data',data);return res.toString(); } private String fail(){Map<String,Object> res = new HashMap<>();res.put('code',1);res.put('desc','fail');return res.toString(); } }2、打包
輸入:mvn clean package,(大概需要等幾分鐘),最好在構建之前指定本地repository,就不需要重新下載jar包了。
指定socket port = 8081,指定準備debug的模塊
a. 先在IDEA啟動debug
b. 然后在終端輸入命令:java -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:8081 -jar remote_test-0.0.1-SNAPSHOT-all.jar
在準備請求的接口上標記斷點
注意:必須先在IDEA啟動Debug,然后再啟動項目
➜ Desktop java -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:8081 -jar remote_test-0.0.1-SNAPSHOT-all.jarERROR: transport error 202: connect failed: Connection refusedERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
到此這篇關于springboot使用IDEA遠程Debug的文章就介紹到這了,更多相關springboot IDEA遠程Debug內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: