曹国伟老婆,墨尔本的翡翠包车版,椎名朔哉
在以上两种情况下,就需要进行远程debug
例子介绍
本应用是一个简单的spring boot工程,只有一个简单的controller,里面一个restful api,接收外部请求,返回ok作为调用结果
@restcontroller public class clientipcontroller { @requestmapping("/health") public string health(httpservletrequest request) { string result = "ok"; return result; } }
在服务器上启动应用(ip:192.168.0.114)
$ mvn clean package # 启动应用 $ java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar client-ip-test-0.0.1-snapshot.jar
注意启动命令中追加的信息
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005(jdk 5-8) -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 (jdk 9+)
在5005端口上多启动一个监听,server=y等待外部debug进程attach进来
在本机上启动debug进程(ip:192.168.0.108),以eclipse为例
通过上面的步骤,我们就在服务器上部署好了一个应用,并把本机的debug进程attach到服务器上的应用中
接着在需要debug的代码中打上断点,访问服务器上的服务,就可以正常进行debug了
通过上面的步骤,我们的确能够实现在本机对服务器上的应用进行调式,但是,这种情况下,要保证本机和服务器代码的同步,每次发现问题,还需要打包->部署等一套流程,即便是采用的ci/cd来做自动发布了,这个过程依旧比较长,特别是当服务器环境是现在比较流行的kubernetes、swarm等容器环境时,这个流程将更长,目前的想法是,用一个基础镜像,镜像里面有git、maven、java环境,镜像的启动命令中执行以下操作
启动镜像时,在测试环境下传入
-e maven_opts=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
参数,指定可以进行远程debug
这样,每次修改完代码,上传到git上后,把对应的镜像重新启动一下就可以实现debug了
如果在线上环境不能执行远程debug,如果是kubernetes环境,可参照local development with java use telepresence on kubernetes
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
apollo与springboot集成实现动态刷新配置的教程详解
网友评论