springboot使用IDEA遠(yuǎn)程Debug
項(xiàng)目上線之后,如果日志打印的很模糊或者業(yè)務(wù)邏輯比較復(fù)雜,有時(shí)候無法定位具體的錯(cuò)誤原因,因此可以通過IDEA遠(yuǎn)程代理進(jìn)行Debug。
線上的代碼一定要和本地的一致!
環(huán)境:
2.1.4.RELEASE(org.springframework.boot) jdk1.8 Apache Maven 3.5.0 1、先創(chuàng)建一個(gè)準(zhǔn)備遠(yuǎn)程調(diào)試的Demo,注意構(gòu)建項(xiàng)目的配置<?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'><!--根據(jù)項(xiàng)目的全名指定啟動(dòng)類--> <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,(大概需要等幾分鐘),最好在構(gòu)建之前指定本地repository,就不需要重新下載jar包了。
指定socket port = 8081,指定準(zhǔn)備debug的模塊
a. 先在IDEA啟動(dòng)debug
b. 然后在終端輸入命令:java -agentlib:jdwp=transport=dt_socket,server=n,address=localhost:8081 -jar remote_test-0.0.1-SNAPSHOT-all.jar
在準(zhǔn)備請(qǐng)求的接口上標(biāo)記斷點(diǎn)
注意:必須先在IDEA啟動(dòng)Debug,然后再啟動(dòng)項(xiàng)目
➜ 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]
到此這篇關(guān)于springboot使用IDEA遠(yuǎn)程Debug的文章就介紹到這了,更多相關(guān)springboot IDEA遠(yuǎn)程Debug內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. JSP數(shù)據(jù)交互實(shí)現(xiàn)過程解析2. Yii2.0引入CSS,JS文件方法3. vue使用webSocket更新實(shí)時(shí)天氣的方法4. Nginx+php配置文件及原理解析5. 解決啟動(dòng)django,瀏覽器顯示“服務(wù)器拒絕訪問”的問題6. 討論CSS中的各類居中方式7. 關(guān)于HTML5的img標(biāo)簽8. python virtualenv和flask安裝沒有名為flask的模塊9. ASP.NET MVC獲取多級(jí)類別組合下的產(chǎn)品10. java中throws實(shí)例用法詳解
