当前位置: 首页 > news >正文

松江泖港网站建设外贸网站免费建设

松江泖港网站建设,外贸网站免费建设,怎么找到外贸公司采购,佛山网站建设费用预算问题背景最近在负责一个订单系统的业务研发,本来不是件困难的事。但是服务的启动时间很慢,慢的令人发指。单次启动的时间约在10多分钟左右,基本一次迭代、开发,大部分的时间都花在了启动项目上。忍无可忍的我,终于决定…


问题背景

最近在负责一个订单系统的业务研发,本来不是件困难的事。但是服务的启动时间很慢,慢的令人发指。单次启动的时间约在10多分钟左右,基本一次迭代、开发,大部分的时间都花在了启动项目上。忍无可忍的我,终于决定找到启动慢的原因。


方案探索

起初对于优化项目启动速度,是毫无头绪。也是傻傻的从百度上去搜解决的方案。一下子就搜到了Jprofiler这个软件,据说是能快速找到错误栈的位置。但是不得不说这软件真的很坑,不仅收费(MAC破解巨难找,找到了还打不开),而且实际因为很多Spring类都是采用动态代理加载的,Jprofiler根本判断不出来错误位置在哪。

尝试Jprofiler无果后,从网上还看到了一个另外的方法,可以通过对运行中的线程作快照,来定位是否存在有死循环的线程。进而优化启动速度。

5c74bea70ff12b2e65f6eb11ecc47fcb.jpeg

采用Thread dump的方式,比较适合你清楚大致原因的时候使用,否则你盲目的去截取到的线程,实际上也很难定位是不是当前线程的问题。尽管错误栈很全,但意味着你需要了解的源码更深。对我这种小白,依旧很难get到具体的原因。


深入钻研

采用网上的解决方案都无疾而终后,决定还是采用最笨的方法解决,就一点点的debug吧!于是在SpringBoot的启动类org.springframework.boot.SpringApplication#run上打满了debug点,逐个关键的debug点去调试。

d05c513be30848351724f199fcd3a884.jpeg

尽管方案很笨也很耗时,启动一次基本10分钟左右。但是很快定位到了启动缓慢的原因。在Springboot的BEAN后处理器的加载方法中,有一个关键的Bean容器DSLContext启动及其的慢,大概需要6、7分钟左右。org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization

767bd69ba3d47b76ebf012bf471b0ab4.jpeg

然而,dslContext是个啥玩意,他为啥又让我的系统启动慢了呢?带着疑惑又搜了一遍百度,直到看到了这篇文章。https://www.jianshu.com/p/f65653a0f11c 。

fe527becbfc8320be59f27b03774c273.jpeg

文章里写到,dslContext启动慢的原因主要是有个:AnnotationAwareAspectJAutoProxyCreator的处理器,该处理器会扫描dslContext中的方法,并逐一判断当前的方式是否需要动态代理。dslContext中包含约800+的方法启动自然会很慢。

最终解决

知道了原因,那么自然也就知道了解决方案。只要让Springboot不扫描到这个dslContext组件了,那么就可以加快启动速度了不是?那么自然就可以从两个角度出发:

1、修改Springboot的扫描范围,不扫描即可;

2、不导入dslContext的依赖包,让Springboot扫描不到

我首先尝试了第一种方法,修改了启动类上@ComponentScan@EnableFeignClients的两个注解的扫描范围,然而,无论我怎么修改,实际上都没有生效。(大概率猜测是因为dslContext并不是采用@Componet注解的方式而是采用@Configuration注入的方式导致。)

无奈之下,只能按照第二种思路去考虑解决方案。然而,作为一个饱经风霜的项目,maven依赖多到数不清,根本不知道该从何下手。

尝试通过Maven Helper插件去搜索dslContext的maven依赖,却也是毫无作用。

(PS:这里不得不提一下Maven Helper这个插件,这个插件可以很快找到我们所依赖的maven,是我平日用来排除相关依赖的利器。)

54052704ed780221d59200d1023bd4de.jpeg

2902e62b9af2734358b670fef4321543.jpeg

也就是抱着尝试的心态,在百度下搜索了一下“使用dslContext”的关键字,很幸运的是,在第二个搜索位置跳出了jooq这个名词。

64a354dc10ff527471d6052b78004ba1.jpeg

于是怀疑,是不是这个jooq依赖把dslContext导入进来了呢?尝试着一搜,果然!

b123495580c6470d6df026df4eab3727.jpeg

毫不犹豫点击了exclude,再启动一次。问题解决!


经验总结

解决项目启动慢的原因其实是个很依靠个人经验和运气、玄学的过程,但是还是有一些方法有迹可循。

1、可以考虑Jprofiler去记录线程的启动时间。(但本次效果不佳,可能需要更正常的打开方式)

2、可以考虑采用截取线程快照的方式定位。

3、最最笨的方法就是采用Debug的方式定位。

在定位到具体的启动缓慢的原因后,如果是因为注入的问题,有下面两条解决思路:

1、不扫描对应的Component组件,可以通过修改@Component、@EnableFeignClients的basePackge参数来控制。

2、如果上述的参数没有生效,可以考虑尝试百度定位引入这个组件的maven依赖是什么,并借助Maven Helper插件将该依赖排除


http://www.yayakq.cn/news/802560/

相关文章:

  • 巩义便宜网站建设网站不收录怎么办
  • 网站设计师培训中心去长沙旅游攻略
  • 做微商怎样加入网站卖东西赚钱北京3d效果图制作公司
  • 信息课做网站的软件网站服务费算什么费用
  • 重庆设计网站建设厦门网站建设要多少钱
  • 高端购物网站个人微博网页制作代码教程
  • 网站平台建设经费预算网站建设的优点和不足
  • 丽水公司做网站专业的网站服务公司
  • 微信网站设计尺寸图书网站开发数据库的建立
  • 比较专业的建设网站的公司企业网站建设专业的公司
  • 网站信息查询网络营销模式包括
  • 网站设计需求互联网网站建设公司组织架构
  • 广州网站制作费用深圳装饰公司网站
  • 微信营销推广软件seo怎么优化关键词排名
  • 泰兴企业网站建设建e全景室内设计网
  • 海南网站策划湖北建设银行官方网站首页
  • 建站技术博客电话交换机ip地址
  • 个人网站备案 流程东莞定制建站网站推广公司
  • 品牌网站建站目的微信app下载安装官方版
  • 天山路街道网站建设百度?o法提交网站
  • 网站空间国外那个好网站建设论文选题背景
  • 网站团队建设情况哪家代运营公司比较好
  • 用国外服务器做网站无锡哪里做网站
  • 网站模板 音乐网站首页结构图
  • 合肥网站建设之4个细节要注意做调查的网站
  • 网站开发可能存在的困难普洱专业企业网站建设
  • 优质院校建设网站中山有哪些网站建立公司
  • 怎么用lls做网站腾讯服务商平台
  • 中山手机建网站利用路由器做网站
  • 网站搬迁做外贸soho 需要有网站吗