java實(shí)現(xiàn)線上環(huán)境遠(yuǎn)程debug調(diào)試過(guò)程
docker中tomcat實(shí)現(xiàn)遠(yuǎn)程調(diào)試配置
由于部署環(huán)境的差異性,相信很多朋友都碰到過(guò)開(kāi)發(fā)環(huán)境正常測(cè)試過(guò)的功能在測(cè)試環(huán)境甚至生產(chǎn)環(huán)境下出現(xiàn)bug的情況。
一般情況下,生產(chǎn)環(huán)境可以采取的手段比較單一,即通過(guò)日志的方式獲取運(yùn)行中的環(huán)境上下文,分析日志文件并嘗試重現(xiàn)bug。
這會(huì)帶來(lái)的問(wèn)題還是不少的,首先,日志的分析是一項(xiàng)比較耗時(shí)的工作;其次,現(xiàn)有的日志記錄不一定能反映出問(wèn)題,你可能需要多次重復(fù)這個(gè)過(guò)程(分析日志->猜測(cè)問(wèn)題->加日志->部署->獲取日志)來(lái)慢慢逼近問(wèn)題。
倘若是測(cè)試環(huán)境,我們還多了一項(xiàng)可供選擇的手段——遠(yuǎn)程調(diào)試——將程序在測(cè)試環(huán)境中以debug模式啟動(dòng),在本機(jī)使用IDEA在工程中設(shè)置斷點(diǎn)進(jìn)行調(diào)試。
配置docker-compose.yml
- CATALINA_OPTS參數(shù)配置啟動(dòng)遠(yuǎn)程調(diào)試功能
version: '2.2' services: test: container_name: test image: tomcat:8.5.32 ports: - "5005:5005" volumes: - "./target/test:/usr/local/tomcat/webapps/ROOT" environment: # tomcat啟動(dòng)遠(yuǎn)程調(diào)試 CATALINA_OPTS: "-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,suspend=n,server=y" command: ["catalina.sh", "run"]
- JPDA參數(shù)配置啟動(dòng)遠(yuǎn)程調(diào)試功能
version: "3" services: tomcat: image: tomcat:8.5.27 ports: - "8080:8080" - "5005:5005" volumes: - ./www:/www:rw - ./conf/server.xml:/usr/local/tomcat/conf/server.xml:ro environment: JPDA_ADDRESS: 5005 JPDA_TRANSPORT: dt_socket command: ["catalina.sh", "jpda", "run"] networks: - default # 需要nginx、mysql、redis、activemq配置都可以在這里加上 networks: default:
docker中spring boot實(shí)現(xiàn)遠(yuǎn)程調(diào)制配置
首先,我們要讓要讓遠(yuǎn)程服務(wù)器支持遠(yuǎn)程調(diào)試功能,在項(xiàng)目啟動(dòng)項(xiàng)上追加特定的 JVM 參數(shù)即可,參數(shù)如下:
晚于 JDK 1.4.X 版本
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=4001
配置docker-compose.yml
app.jar指打包后的spring boot包
version: '2.2' services: test: container_name: test ports: - "8080:8080" - "5005:5005" CMD ["java","-jar","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-Dspring.profiles.active=sit","app.jar"]
配置IDEA
打開(kāi)配置窗口
點(diǎn)擊左上角+號(hào),找到remote,配置服務(wù)部署的服務(wù)地址,如果是本地測(cè)試配置localhost,配置上文配置中指定的端口
選擇啟動(dòng),即可調(diào)試遠(yuǎn)程項(xiàng)目
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
普通對(duì)象使用spring容器中的對(duì)象的實(shí)現(xiàn)方法
這篇文章主要介紹了普通對(duì)象使用spring容器中的對(duì)象的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Java利用IO流實(shí)現(xiàn)簡(jiǎn)易的記事本功能
本文將利用Java中IO流編寫(xiě)一個(gè)模擬日記本的程序,通過(guò)在控制臺(tái)輸入指令,實(shí)現(xiàn)在本地新建文件,打開(kāi)日記本和修改日記本等功能,感興趣的可以了解一下2022-05-05idea2019版Plugins中搜索不到任何插件的問(wèn)題解決
本文主要介紹了idea2019版Plugins中搜索不到任何插件的問(wèn)題解決,插件搜不出來(lái)的主要原因是plugins.jetbrains.com ping不通,下面就來(lái)介紹一下解決方法,感興趣的可以了解一下2023-09-09Maven報(bào)錯(cuò)之導(dǎo)入Junit包來(lái)實(shí)現(xiàn)@Test注解問(wèn)題
這篇文章主要介紹了Maven報(bào)錯(cuò)之導(dǎo)入Junit包來(lái)實(shí)現(xiàn)@Test注解問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11SpringBoot中集成企業(yè)微信機(jī)器人實(shí)現(xiàn)運(yùn)維報(bào)警的示例
本文主要介紹了SpringBoot中集成企業(yè)微信機(jī)器人實(shí)現(xiàn)運(yùn)維報(bào)警,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應(yīng)用場(chǎng)景
這篇文章主要介紹了Java中的轉(zhuǎn)換流、壓縮流、序列化流、打印流及應(yīng)用場(chǎng)景,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06Spring Boot 2 整合 QuartJob 實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理功能
Quartz是一個(gè)完全由java編寫(xiě)的開(kāi)源作業(yè)調(diào)度框架,形式簡(jiǎn)易,功能強(qiáng)大。接下來(lái)通過(guò)本文給大家分享Spring Boot 2 整合 QuartJob 實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理功能,感興趣的朋友一起看看吧2019-11-11