基於SpringAOP開發的方法調用鏈分析框架

新人熟悉項目必備工具!基於SpringAOP開發的一款方法調用鏈分析插件,簡單到只須要一個註解,異步非阻塞,完美嵌入Spring Cloud、Dubbo項目!不再用擔憂搞不懂項目!git

不少新人進入一家新公司後,最頭疼的就是如何快速瞭解公司的業務和項目架構。github

由於文檔不多,沒有文檔,或者是文檔嚴重落伍, 根本無法看;若是你碰到一個特別熱心的老員工,事無鉅細地給你講,隨時在你身邊答疑解惑, 那簡直是天大的好運氣, 現實是你們都很忙,沒人給你講解。web

很快就要深刻項目作開發了,怎麼辦呢?算法

我在加入新公司後,就遇到了悲催的狀況。因而,我就作了這款可視化流程分析插件!幫助更多入職新人快速熟悉業務。spring

演示網址:http://116.85.23.6:8521/projecttree數據庫

Maven

<dependency>
  <groupId>cn.yueshutong</groupId>
  <artifactId>spring-project-tree</artifactId>
  <version>0.0.5.RELEASE</version>
</dependency>

Spring Boot安裝

若是你的項目是Spring Boot,那麼使用會很是簡單,只須要一個註解便可。json

@EnableProjectTree(value = "")註解參數爲pointcut表達式,完整代碼以下:安全

@SpringBootApplication
@EnableProjectTree("execution(* com.example.springboot.demo..*(..))")
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

}

注:重構後的Project Tree不止增長了對分佈式接口的監控,還增長了pointcut表示式。springboot

訪問ProjectTree

啓動你的項目,首先訪問你項目的某個接口,使其執行被監控的方法。而後訪問localhost:8080/projecttree查看網頁。數據結構

接口說明

接口 說明
/projecttree 返回完整調用鏈視圖
/projecttree/all 返回所有方法視圖
/projecttree/json JSON形式的返回結果
/projecttree/{methodId} 對某一方法的JSON結果

注意事項

使用Shiro、Spring Securit等安全框架時,須要注意對此URL的權限控制。

若你的項目使用Jpa而且遇到Dao層接口注入失敗,Entity掃描失敗,能夠考慮使用@EntityScan和@EnableJpaRepositories註解。

源碼介紹

如何下降對主流程的性能消耗?

使用單例線程池實現異步非阻塞模型,下降對主流程的性能影響。

爲何使用單例線程池?

首先只有一個線程的線程池實際是隊列+單線程,一個一個任務的進行執行,徹底知足本插件的使用需求,對性能的影響也降到最低。

基於內存的內嵌數據庫實現數據的快速讀寫,這裏不用擔憂數據過大問題,本插件基於方法調用鏈分析進行選擇性保存,理論上說,從接口開始,有多少流程分支,就有多少條數據記錄。佔用內存極小。

如何實現方法調用分析?

基於棧數據結構設計算法。

關於做者

博客:http://www.yueshutong.cn

郵箱:yster@foxmail.com

Github:https://github.com/yueshutong/Spring-Project-Tree

Gitee:https://gitee.com/zyzpp/Spring-Project-Tree

相關文章
相關標籤/搜索