spring处理循环依赖时序图_Maven依赖管理系统
【思考】
首先,簡單講述一下為什么需要這樣一個(gè)系統(tǒng)?
不知道大家有沒有思考,在一個(gè)可能有上千個(gè)模塊/產(chǎn)品的公司,對(duì)于模塊之間有較多相互依賴的情況,以下問題該如何解決:
以上問題,其核心原則就是,在所有產(chǎn)品的整個(gè)開發(fā)周期中,在修改某個(gè)依賴的同時(shí),不會(huì)對(duì)其他產(chǎn)品造成任何影響。
【如何保存依賴關(guān)系】
之前的時(shí)候,考慮過使用鍵值對(duì)數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫去保存相關(guān)的依賴,但是效果都不理想,最后選用了圖數(shù)據(jù)庫(Neo4J).
這樣做有三個(gè)好處:
【設(shè)計(jì)】
代碼結(jié)構(gòu)如下:
在Model中,Dependency映射pom文件中的dependency,Project映射產(chǎn)品,Neo4jConn映射數(shù)據(jù)庫信息。
Service中,GraphBuilder主要處理產(chǎn)品以及模塊之間的相互依賴關(guān)系,Neo4JHandler主要處理與數(shù)據(jù)庫相關(guān)的具體操作。
Util里面,Finder繼承SimpleFileVisitor,處理一些路徑的匹配工作,PomFileFinder利用Finder,尋找所有的pom文件并返回列表,XMLConverter利用javax.xml的工具類處理具體的xml文件。
DependencyManager作為整個(gè)程序的入口,對(duì)外提供服務(wù)。
【使用】
首先在工程目錄下執(zhí)行mvn clean install/package打包;
然后進(jìn)入target目錄下執(zhí)行:
java -jar dependency-manager-0.0.1-SNAPSHOT-jar-with-dependencies.jar D:/workspace/so bolt://localhost:7687 neo4j neo4j Module org.spring*
第一個(gè)參數(shù)指定pom文件路徑(默認(rèn)遞歸到20層,超過無法識(shí)別到);
第二個(gè)參數(shù)指定數(shù)據(jù)庫的url,第三個(gè)參數(shù)指定數(shù)據(jù)庫用戶名,第四個(gè)參數(shù)指定數(shù)據(jù)庫密碼;
第五個(gè)參數(shù)指定需要導(dǎo)出依賴關(guān)系的是產(chǎn)品還是模塊,如果指定模塊,會(huì)將所有滿足條件的模塊全部導(dǎo)出,如果只指定產(chǎn)品,則只導(dǎo)出所有產(chǎn)品之間的依賴關(guān)系。
第六個(gè)參數(shù)指定模塊需要滿足的條件,可以指定前綴,中綴,后綴,如spring*,指所有以spring開頭的包,這種方式可以去掉一些我們不關(guān)注的包,比如org相關(guān)的,spring框架相關(guān)的,可以大大降低我們的工作量。
當(dāng)然,你也可以直接執(zhí)行:
java -jar dependency-manager-0.0.1-SNAPSHOT-jar-with-dependencies.jar
命令來獲取幫助。
如圖所示則執(zhí)行成功:
【結(jié)果】
執(zhí)行結(jié)果可以在Neo4J中查看:
紅色為產(chǎn)品,褐色為模塊。
【優(yōu)化】
當(dāng)然了,這只是一個(gè)小應(yīng)用,還有很大的發(fā)展空間,之后會(huì)有如下幾個(gè)改進(jìn):
當(dāng)然,也希望有同樣想法的小伙伴可以提提設(shè)計(jì)上的意見,或者閱讀過源碼之后有改進(jìn)的思路給到,都不勝榮幸。
【獲取】
GitHub地址:https://github.com/liufarui/dependency-manager
總結(jié)
以上是生活随笔為你收集整理的spring处理循环依赖时序图_Maven依赖管理系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql mysql_set_char
- 下一篇: 小球进盒子C语言,N个小球放进M个盒子算