正文
使用Arthas 获取Spring ApplicationContext还原问题现场
原
荐
字数 734
阅读 27
收藏 0
Spring Arthas
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>>
最近来了个实习僧小弟,安排他实现对目标网站 连通性检测的小功能,简单讲就是将下边的shell 脚本换成Java 代码来实现
#!/bin/bash URL="https://www.baidu" HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"` #echo $HTTP_CODE if [ $HTTP_CODE != '200' ];then curl 'https://oapi.dingtalk.com/robot/send?access_token=xx' / -H 'Content-Type: application/json' / -d '{"msgtype": "text", "text": { "content": "百度平台状态不正常,请注意!" }, "isAtAll": true }' fi
@Scheduled(cron = "0 0 0/1 * * ? ") public void startSchedule() { log.info("开始执行定时任务 ,检测百度网站连通性"); try { HttpResponse response = HttpRequest.get("").execute(); if (HttpStatus.HTTP_OK != response.getStatus()) { this.send2DingTalk(response.getStatus()); } log.info("请求百度成功,返回报文:{}",response.body()); } catch (HttpException e) { log.error("请求异常百度:{}", e); this.send2DingTalk(e.getMessage()); } log.info("执行检测百度网站连通任务完毕"); }
部署在服务器上,我的老jio本 都已经呼叫任务状态不正常了,可是小弟的Java 代码还是没有执行通知
核心拿到 spring context 然后执行它的 startSchedule
方法
RequestMappingHandlerAdapter
执行 invokeHandlerMethod
到达目标接口上进行处理 RequestMappingHandlerAdapter
类中有 getApplicationContext() @Nullable public final ApplicationContext getApplicationContext() throws IllegalStateException { if (this.applicationContext == null && this.isContextRequired()) { throw new IllegalStateException("ApplicationObjectSupport instance [" + this + "] does not run in an ApplicationContext"); } else { return this.applicationContext; } }
RequestMappingHandlerAdapter
target 目标,然后执行 getApplicationContext
tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod
任意执行一次web 请求,tt 即可捕获
根据目标的索引,执行自定义 OGNL 表达式即可
tt -i 1019 -w 'target.getApplicationContext()'
tt -i 1000 -w 'target.getApplicationContext().getBean("baiduSchedule").startSchedule()'
ok 任务重新触发了
事故原因调查清楚,由于使用hutool 的工具类 没有设置timeout 导致无限等待,所以没有执行catch 逻辑
禁止
生产操作,只是提供个思路 ,当然可以衍生其他业务场景的操作 © 著作权归作者所有
打印
上一篇: Spring的事务传播行为
下一篇: Spring Cloud Gateway 扩展支持动态限流
我们都是从 Hello World 开始的!
领取条件:技能积分大于 200,且被推荐的博客数量大于 3 篇。
粉丝 643
博文 128
码字总数 66849
作品 1
潍坊
UI设计师
提问相关文章 最新文章
背景 尽管在生产环境热更新代码,并不是很好的行为,很可能导致:热更不规范,同事两行泪。 但很多时候我们的确希望能热更新代码,比如: 线上排查问题,找到修复思路了,但应用重启之后,环...
横云断岭
02/19
0
0
背景 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 https://github.com/alibaba/arthas Arthas提供了非常丰富的关于调用拦截的命令,比如 trace/watch/monitor/tt 。但是很多时候我...
阿里云云栖社区
01/31
0
0
Apache Dubbo是Alibaba开源的高性能RPC框架,在国内有非常多的用户。 Github: https://github.com/apache/incubator-dubbo 文档:http://dubbo.incubator.apache.org/zh-cn/ Arthas是Alibaba......
横云断岭
2018/12/10
0
0
背景 Arthas是阿里巴巴开源的Java诊断利器,深受开发者喜爱。 https://github.com/alibaba/arthas Arthas在线教程 之前分享了Arthas怎样排查 404/401 的问题: http://hengyunabc.github.io/a...
横云断岭
06/05
0
0
一切新的开始,都始于一个里程碑。 2月20日上午,Java 开源诊断工具 Arthas 的 GitHub Star 突破10000,距离开源后的第一个Release 版发布仅 147 天。 从中,我们不仅看到 Arthas 在开发者群...
中间件小哥
02/21
0
0
没有更多内容
加载失败,请刷新页面
加载更多背景 最近来了个实习僧小弟,安排他实现对目标网站 连通性检测的小功能,简单讲就是将下边的shell 脚本换成Java 代码来实现 #!/bin/bashURL="https://www.baidu"HTTP_CODE=`curl -o /dev/nu...
冷冷gg
36分钟前
27
0
Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :一个人看电影霸场什么体验#今日歌曲推荐# 分享keshi的单曲《just friends》: 《just friends》- keshi 手机党少年们想听歌,请使...
小小编辑
今天
2.6K
22
首先,什么是左值、右值? 左值是能出现在等号左边和右边的变量,右值是只能出现在等号右边的变量(或表达式)。 左值引用为 & , 而右值引用为 &&。 那么为什么需要右值引用呢?主要是为了处...
天王盖地虎626
昨天
16
0
由于cookie的使用与jsp有关联,会使用到部分jsp技术,所以先简单介绍一下jsp。 简单介绍jsp jsp的出现是为了解决Serlvet中拼接大量的html代码的问题,同时在jsp技术中可以直接书写html,js,...
guo__wei
昨天
22
0
接着上期的内容我们继续开展谈话的内容,作为DDD构建的基石----【OOP】是其最基本的构成,计算机软件用于无限趋近的还原我们现时社会的某种活动,一切皆可建模(这样的思想不一定全对,但在一...
边缘行者
昨天
32
0
没有更多内容
加载失败,请刷新页面
加载更多